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