1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.security.cert;
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase;
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidAlgorithmParameterException;
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException;
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException;
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider;
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security;
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CRL;
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CRLSelector;
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertSelector;
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertStore;
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertStoreException;
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertStoreParameters;
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertStoreSpi;
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.Certificate;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.ArrayList;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class CertStore2Test extends TestCase {
22f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String CERT_STORE_PROVIDER_NAME = "TestCertStoreProvider";
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final String CERT_STORE_NAME = "TestCertStore";
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    Provider provider;
27f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void setUp() throws Exception {
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.setUp();
30f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes        provider = new MyCertStoreProvider();
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Security.addProvider(provider);
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
33f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    protected void tearDown() throws Exception {
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super.tearDown();
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Security.removeProvider(CERT_STORE_PROVIDER_NAME);
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetInstanceStringCertStoreParameters() {
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStoreParameters parameters = new MyCertStoreParameters();
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore certStore = CertStore.getInstance(CERT_STORE_NAME,
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    parameters);
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(certStore);
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(certStore.getCertStoreParameters());
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotSame(parameters, certStore.getCertStoreParameters());
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore certStore = CertStore.getInstance(CERT_STORE_NAME, null);
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(certStore);
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull(certStore.getCertStoreParameters());
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore.getInstance("UnknownCertStore", null);
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("expected NoSuchAlgorithmException");
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore.getInstance(CERT_STORE_NAME,
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new MyOtherCertStoreParameters());
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("expected InvalidAlgorithmParameterException");
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetInstanceStringCertStoreParametersString() {
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStoreParameters parameters = new MyCertStoreParameters();
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore certStore = CertStore.getInstance(CERT_STORE_NAME,
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    parameters, CERT_STORE_PROVIDER_NAME);
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(certStore);
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(certStore.getCertStoreParameters());
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotSame(parameters, certStore.getCertStoreParameters());
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(CERT_STORE_PROVIDER_NAME, certStore.getProvider()
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getName());
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchProviderException e) {
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore certStore = CertStore.getInstance(CERT_STORE_NAME, null,
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    CERT_STORE_PROVIDER_NAME);
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(certStore);
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull(certStore.getCertStoreParameters());
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertEquals(CERT_STORE_PROVIDER_NAME, certStore.getProvider()
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    .getName());
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchProviderException e) {
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore.getInstance("UnknownCertStore",
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new MyCertStoreParameters(), CERT_STORE_PROVIDER_NAME);
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("expected NoSuchAlgorithmException");
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchProviderException e) {
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore.getInstance(CERT_STORE_NAME, null,
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    "UnknownCertStoreProvider");
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("expected NoSuchProviderException");
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchProviderException e) {
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore.getInstance(CERT_STORE_NAME,
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new MyOtherCertStoreParameters(), CERT_STORE_PROVIDER_NAME);
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchProviderException e) {
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetInstanceStringCertStoreParametersProvider() {
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStoreParameters parameters = new MyCertStoreParameters();
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore certStore = CertStore.getInstance(CERT_STORE_NAME,
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    parameters, provider);
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(certStore);
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(certStore.getCertStoreParameters());
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotSame(parameters, certStore.getCertStoreParameters());
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertSame(provider, certStore.getProvider());
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore certStore = CertStore.getInstance(CERT_STORE_NAME, null,
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    provider);
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(certStore);
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull(certStore.getCertStoreParameters());
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertSame(provider, certStore.getProvider());
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore.getInstance("UnknownCertStore", null, provider);
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("expected NoSuchAlgorithmException");
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
190f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            CertStore.getInstance(CERT_STORE_NAME,
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    new MyOtherCertStoreParameters(), provider);
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("expected InvalidAlgorithmParameterException");
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetCertificates() {
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertStore certStore = null;
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certStore = CertStore.getInstance(CERT_STORE_NAME, null);
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
212f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(certStore);
214f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<? extends Certificate> certificates = certStore.getCertificates(null);
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull(certificates);
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertStoreException e) {
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
221f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<? extends Certificate> certificates = certStore.getCertificates(new MyCertSelector());
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(certificates);
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(certificates.isEmpty());
226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertStoreException e) {
227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
229f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certStore.getCertificates(new MyOtherCertSelector());
232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("expected CertStoreException");
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertStoreException e) {
234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public void testGetCRLs() {
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        CertStore certStore = null;
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certStore = CertStore.getInstance(CERT_STORE_NAME, new MyCertStoreParameters());
242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (InvalidAlgorithmParameterException e) {
243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (NoSuchAlgorithmException e) {
245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
247f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        assertNotNull(certStore);
249f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<? extends CRL> ls = certStore.getCRLs(null);
252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNull(ls);
253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertStoreException e) {
254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
256f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Collection<? extends CRL> ls = certStore.getCRLs(new MyCRLSelector());
259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertNotNull(ls);
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            assertTrue(ls.isEmpty());
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertStoreException e) {
262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("unexpected exception: " + e);
263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
264f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            certStore.getCRLs(new MyOtherCRLSelector());
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            fail("expected CertStoreException");
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (CertStoreException e) {
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // ok
270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static class MyCertStoreProvider extends Provider {
274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        protected MyCertStoreProvider() {
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(CERT_STORE_PROVIDER_NAME, 1.0, "Test CertStore Provider 1.0");
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put("CertStore." + CERT_STORE_NAME, MyCertStoreSpi.class.getName());
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
280f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static class MyCertStoreParameters implements CertStoreParameters {
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Object clone() {
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return new MyCertStoreParameters();
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static class MyOtherCertStoreParameters implements CertStoreParameters {
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Object clone() {
289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return new MyCertStoreParameters();
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static class MyCRLSelector implements CRLSelector {
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean match(CRL crl) {
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Object clone() {
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return new MyCRLSelector();
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
303f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static class MyOtherCRLSelector implements CRLSelector {
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean match(CRL crl) {
306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Object clone() {
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return new MyOtherCRLSelector();
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
312f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
314f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static class MyCertSelector implements CertSelector {
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean match(Certificate cert) {
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
320f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Object clone() {
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return new MyCertSelector();
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
324f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
326f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    static class MyOtherCertSelector implements CertSelector {
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public boolean match(Certificate crl) {
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Object clone() {
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return new MyOtherCRLSelector();
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
335f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
337f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static class MyCertStoreSpi extends CertStoreSpi {
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public MyCertStoreSpi() throws InvalidAlgorithmParameterException {
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(null);
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
343f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public MyCertStoreSpi(CertStoreParameters params)
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws InvalidAlgorithmParameterException {
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            super(params);
347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (params != null && !(params instanceof MyCertStoreParameters)) {
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throw new InvalidAlgorithmParameterException(
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                        "invalid parameters");
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @Override
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Collection<? extends CRL> engineGetCRLs(CRLSelector selector)
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                throws CertStoreException {
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (selector != null) {
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (!(selector instanceof MyCRLSelector)) {
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throw new CertStoreException();
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return new ArrayList<CRL>();
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        @Override
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        public Collection<? extends Certificate> engineGetCertificates(
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                CertSelector selector) throws CertStoreException {
368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (selector != null) {
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                if (!(selector instanceof MyCertSelector)) {
370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                    throw new CertStoreException();
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                }
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return new ArrayList<Certificate>();
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return null;
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
380