| package tests.security.cert; |
| |
| import junit.framework.TestCase; |
| |
| import java.security.InvalidAlgorithmParameterException; |
| import java.security.NoSuchAlgorithmException; |
| import java.security.NoSuchProviderException; |
| import java.security.Provider; |
| import java.security.Security; |
| import java.security.cert.CRL; |
| import java.security.cert.CRLSelector; |
| import java.security.cert.CertSelector; |
| import java.security.cert.CertStore; |
| import java.security.cert.CertStoreException; |
| import java.security.cert.CertStoreParameters; |
| import java.security.cert.CertStoreSpi; |
| import java.security.cert.Certificate; |
| import java.util.ArrayList; |
| import java.util.Collection; |
| |
| public class CertStore2Test extends TestCase { |
| |
| private static final String CERT_STORE_PROVIDER_NAME = "TestCertStoreProvider"; |
| private static final String CERT_STORE_NAME = "TestCertStore"; |
| |
| Provider provider; |
| |
| protected void setUp() throws Exception { |
| super.setUp(); |
| provider = new MyCertStoreProvider(); |
| Security.addProvider(provider); |
| } |
| |
| @Override |
| protected void tearDown() throws Exception { |
| super.tearDown(); |
| Security.removeProvider(CERT_STORE_PROVIDER_NAME); |
| } |
| |
| public void testGetInstanceStringCertStoreParameters() { |
| try { |
| CertStoreParameters parameters = new MyCertStoreParameters(); |
| CertStore certStore = CertStore.getInstance(CERT_STORE_NAME, |
| parameters); |
| assertNotNull(certStore); |
| assertNotNull(certStore.getCertStoreParameters()); |
| assertNotSame(parameters, certStore.getCertStoreParameters()); |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| CertStore certStore = CertStore.getInstance(CERT_STORE_NAME, null); |
| assertNotNull(certStore); |
| assertNull(certStore.getCertStoreParameters()); |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| CertStore.getInstance("UnknownCertStore", null); |
| fail("expected NoSuchAlgorithmException"); |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchAlgorithmException e) { |
| // ok |
| } |
| |
| try { |
| CertStore.getInstance(CERT_STORE_NAME, |
| new MyOtherCertStoreParameters()); |
| fail("expected InvalidAlgorithmParameterException"); |
| } catch (InvalidAlgorithmParameterException e) { |
| // ok |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } |
| } |
| |
| public void testGetInstanceStringCertStoreParametersString() { |
| try { |
| CertStoreParameters parameters = new MyCertStoreParameters(); |
| CertStore certStore = CertStore.getInstance(CERT_STORE_NAME, |
| parameters, CERT_STORE_PROVIDER_NAME); |
| assertNotNull(certStore); |
| assertNotNull(certStore.getCertStoreParameters()); |
| assertNotSame(parameters, certStore.getCertStoreParameters()); |
| assertEquals(CERT_STORE_PROVIDER_NAME, certStore.getProvider() |
| .getName()); |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchProviderException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| CertStore certStore = CertStore.getInstance(CERT_STORE_NAME, null, |
| CERT_STORE_PROVIDER_NAME); |
| assertNotNull(certStore); |
| assertNull(certStore.getCertStoreParameters()); |
| assertEquals(CERT_STORE_PROVIDER_NAME, certStore.getProvider() |
| .getName()); |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchProviderException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| CertStore.getInstance("UnknownCertStore", |
| new MyCertStoreParameters(), CERT_STORE_PROVIDER_NAME); |
| fail("expected NoSuchAlgorithmException"); |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchAlgorithmException e) { |
| // ok |
| } catch (NoSuchProviderException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| CertStore.getInstance(CERT_STORE_NAME, null, |
| "UnknownCertStoreProvider"); |
| fail("expected NoSuchProviderException"); |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchProviderException e) { |
| // ok |
| } |
| |
| try { |
| CertStore.getInstance(CERT_STORE_NAME, |
| new MyOtherCertStoreParameters(), CERT_STORE_PROVIDER_NAME); |
| } catch (InvalidAlgorithmParameterException e) { |
| // ok |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchProviderException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| |
| } |
| |
| public void testGetInstanceStringCertStoreParametersProvider() { |
| try { |
| CertStoreParameters parameters = new MyCertStoreParameters(); |
| CertStore certStore = CertStore.getInstance(CERT_STORE_NAME, |
| parameters, provider); |
| assertNotNull(certStore); |
| assertNotNull(certStore.getCertStoreParameters()); |
| assertNotSame(parameters, certStore.getCertStoreParameters()); |
| assertSame(provider, certStore.getProvider()); |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| CertStore certStore = CertStore.getInstance(CERT_STORE_NAME, null, |
| provider); |
| assertNotNull(certStore); |
| assertNull(certStore.getCertStoreParameters()); |
| assertSame(provider, certStore.getProvider()); |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| CertStore.getInstance("UnknownCertStore", null, provider); |
| fail("expected NoSuchAlgorithmException"); |
| } catch (NoSuchAlgorithmException e) { |
| // ok |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| CertStore.getInstance(CERT_STORE_NAME, |
| new MyOtherCertStoreParameters(), provider); |
| fail("expected InvalidAlgorithmParameterException"); |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } catch (InvalidAlgorithmParameterException e) { |
| // ok |
| } |
| |
| } |
| |
| public void testGetCertificates() { |
| CertStore certStore = null; |
| try { |
| certStore = CertStore.getInstance(CERT_STORE_NAME, null); |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| assertNotNull(certStore); |
| |
| try { |
| Collection<? extends Certificate> certificates = certStore.getCertificates(null); |
| assertNull(certificates); |
| } catch (CertStoreException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| Collection<? extends Certificate> certificates = certStore.getCertificates(new MyCertSelector()); |
| assertNotNull(certificates); |
| assertTrue(certificates.isEmpty()); |
| } catch (CertStoreException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| certStore.getCertificates(new MyOtherCertSelector()); |
| fail("expected CertStoreException"); |
| } catch (CertStoreException e) { |
| // ok |
| } |
| } |
| |
| public void testGetCRLs() { |
| CertStore certStore = null; |
| try { |
| certStore = CertStore.getInstance(CERT_STORE_NAME, new MyCertStoreParameters()); |
| } catch (InvalidAlgorithmParameterException e) { |
| fail("unexpected exception: " + e); |
| } catch (NoSuchAlgorithmException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| assertNotNull(certStore); |
| |
| try { |
| Collection<? extends CRL> ls = certStore.getCRLs(null); |
| assertNull(ls); |
| } catch (CertStoreException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| Collection<? extends CRL> ls = certStore.getCRLs(new MyCRLSelector()); |
| assertNotNull(ls); |
| assertTrue(ls.isEmpty()); |
| } catch (CertStoreException e) { |
| fail("unexpected exception: " + e); |
| } |
| |
| try { |
| certStore.getCRLs(new MyOtherCRLSelector()); |
| fail("expected CertStoreException"); |
| } catch (CertStoreException e) { |
| // ok |
| } |
| } |
| |
| static class MyCertStoreProvider extends Provider { |
| |
| protected MyCertStoreProvider() { |
| super(CERT_STORE_PROVIDER_NAME, 1.0, "Test CertStore Provider 1.0"); |
| put("CertStore." + CERT_STORE_NAME, MyCertStoreSpi.class.getName()); |
| } |
| } |
| |
| static class MyCertStoreParameters implements CertStoreParameters { |
| public Object clone() { |
| return new MyCertStoreParameters(); |
| } |
| } |
| |
| static class MyOtherCertStoreParameters implements CertStoreParameters { |
| public Object clone() { |
| return new MyCertStoreParameters(); |
| } |
| } |
| |
| static class MyCRLSelector implements CRLSelector { |
| |
| public boolean match(CRL crl) { |
| return false; |
| } |
| |
| public Object clone() { |
| return new MyCRLSelector(); |
| } |
| } |
| |
| static class MyOtherCRLSelector implements CRLSelector { |
| public boolean match(CRL crl) { |
| return false; |
| } |
| |
| public Object clone() { |
| return new MyOtherCRLSelector(); |
| } |
| |
| } |
| |
| static class MyCertSelector implements CertSelector { |
| |
| public boolean match(Certificate cert) { |
| return false; |
| } |
| |
| public Object clone() { |
| return new MyCertSelector(); |
| } |
| |
| } |
| |
| static class MyOtherCertSelector implements CertSelector { |
| public boolean match(Certificate crl) { |
| return false; |
| } |
| |
| public Object clone() { |
| return new MyOtherCRLSelector(); |
| } |
| |
| } |
| |
| public static class MyCertStoreSpi extends CertStoreSpi { |
| |
| public MyCertStoreSpi() throws InvalidAlgorithmParameterException { |
| super(null); |
| } |
| |
| public MyCertStoreSpi(CertStoreParameters params) |
| throws InvalidAlgorithmParameterException { |
| super(params); |
| if (params != null && !(params instanceof MyCertStoreParameters)) { |
| throw new InvalidAlgorithmParameterException( |
| "invalid parameters"); |
| } |
| } |
| |
| @Override |
| public Collection<? extends CRL> engineGetCRLs(CRLSelector selector) |
| throws CertStoreException { |
| if (selector != null) { |
| if (!(selector instanceof MyCRLSelector)) { |
| throw new CertStoreException(); |
| } |
| return new ArrayList<CRL>(); |
| } |
| return null; |
| } |
| |
| @Override |
| public Collection<? extends Certificate> engineGetCertificates( |
| CertSelector selector) throws CertStoreException { |
| if (selector != null) { |
| if (!(selector instanceof MyCertSelector)) { |
| throw new CertStoreException(); |
| } |
| return new ArrayList<Certificate>(); |
| } |
| return null; |
| } |
| |
| } |
| |
| } |