Home | History | Annotate | Download | only in cert
      1 /*
      2  *  Licensed to the Apache Software Foundation (ASF) under one or more
      3  *  contributor license agreements.  See the NOTICE file distributed with
      4  *  this work for additional information regarding copyright ownership.
      5  *  The ASF licenses this file to You under the Apache License, Version 2.0
      6  *  (the "License"); you may not use this file except in compliance with
      7  *  the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  *  Unless required by applicable law or agreed to in writing, software
     12  *  distributed under the License is distributed on an "AS IS" BASIS,
     13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  *  See the License for the specific language governing permissions and
     15  *  limitations under the License.
     16  */
     17 
     18 /**
     19  * @author Vera Y. Petrashkova
     20  * @version $Revision$
     21  */
     22 
     23 package tests.security.cert;
     24 
     25 import junit.framework.TestCase;
     26 
     27 import org.apache.harmony.security.tests.support.SpiEngUtils;
     28 import org.apache.harmony.security.tests.support.cert.MyCertPath;
     29 import org.apache.harmony.security.tests.support.cert.TestUtils;
     30 
     31 import java.security.InvalidAlgorithmParameterException;
     32 import java.security.NoSuchAlgorithmException;
     33 import java.security.NoSuchProviderException;
     34 import java.security.Provider;
     35 import java.security.Security;
     36 import java.security.cert.CertPath;
     37 import java.security.cert.CertPathParameters;
     38 import java.security.cert.CertPathValidator;
     39 import java.security.cert.CertPathValidatorException;
     40 import java.security.cert.PKIXParameters;
     41 
     42 /**
     43  * Tests for CertPathValidator class constructors and methods
     44  */
     45 public class CertPathValidator2Test extends TestCase {
     46     private static final String defaultAlg = "CertPB";
     47 
     48     public static final String CertPathValidatorProviderClass = "org.apache.harmony.security.tests.support.cert.MyCertPathValidatorSpi";
     49 
     50     private static final String[] invalidValues = SpiEngUtils.invalidValues;
     51 
     52     private static final String[] validValues;
     53 
     54     static {
     55         validValues = new String[4];
     56         validValues[0] = defaultAlg;
     57         validValues[1] = defaultAlg.toLowerCase();
     58         validValues[2] = "CeRtPb";
     59         validValues[3] = "cERTpb";
     60     }
     61 
     62     Provider mProv;
     63 
     64     protected void setUp() throws Exception {
     65         super.setUp();
     66         mProv = (new SpiEngUtils()).new MyProvider("MyCertPathValidatorProvider",
     67                 "Provider for testing", CertPathValidator1Test.srvCertPathValidator.concat(".")
     68                         .concat(defaultAlg), CertPathValidatorProviderClass);
     69         Security.insertProviderAt(mProv, 1);
     70     }
     71 
     72     /*
     73      * @see TestCase#tearDown()
     74      */
     75     protected void tearDown() throws Exception {
     76         super.tearDown();
     77         Security.removeProvider(mProv.getName());
     78     }
     79 
     80     private void checkResult(CertPathValidator certV) throws CertPathValidatorException,
     81             InvalidAlgorithmParameterException {
     82         String dt = CertPathValidator.getDefaultType();
     83         String propName = "certpathvalidator.type";
     84         for (int i = 0; i < invalidValues.length; i++) {
     85             Security.setProperty(propName, invalidValues[i]);
     86             assertEquals("Incorrect default type", CertPathValidator.getDefaultType(),
     87                     invalidValues[i]);
     88         }
     89         Security.setProperty(propName, dt);
     90         assertEquals("Incorrect default type", CertPathValidator.getDefaultType(), dt);
     91         certV.validate(null, null);
     92         try {
     93             certV.validate(null, null);
     94         } catch (CertPathValidatorException e) {
     95         }
     96         try {
     97             certV.validate(null, null);
     98         } catch (InvalidAlgorithmParameterException e) {
     99         }
    100     }
    101 
    102     /**
    103      * Test for <code>getInstance(String algorithm)</code> method Assertions:
    104      * throws NullPointerException when algorithm is null throws
    105      * NoSuchAlgorithmException when algorithm is not available returns
    106      * CertPathValidator object
    107      */
    108     public void testGetInstance01() throws NoSuchAlgorithmException,
    109             InvalidAlgorithmParameterException, CertPathValidatorException {
    110         try {
    111             CertPathValidator.getInstance(null);
    112             fail("NullPointerException or NoSuchAlgorithmException must be thrown when algorithm is null");
    113         } catch (NullPointerException e) {
    114         } catch (NoSuchAlgorithmException e) {
    115         }
    116         for (int i = 0; i < invalidValues.length; i++) {
    117             try {
    118                 CertPathValidator.getInstance(invalidValues[i]);
    119                 fail("NoSuchAlgorithmException must be thrown (type: ".concat(invalidValues[i])
    120                         .concat(")"));
    121             } catch (NoSuchAlgorithmException e) {
    122             }
    123         }
    124         CertPathValidator cerPV;
    125         for (int i = 0; i < validValues.length; i++) {
    126             cerPV = CertPathValidator.getInstance(validValues[i]);
    127             assertEquals("Incorrect type", cerPV.getAlgorithm(), validValues[i]);
    128             assertEquals("Incorrect provider", cerPV.getProvider(), mProv);
    129             checkResult(cerPV);
    130         }
    131     }
    132 
    133     /**
    134      * Test for <code>getInstance(String algorithm, String provider)</code>
    135      * method Assertions: throws NullPointerException when algorithm is null
    136      * throws NoSuchAlgorithmException when algorithm is not available throws
    137      * IllegalArgumentException when provider is null or empty; throws
    138      * NoSuchProviderException when provider is available; returns
    139      * CertPathValidator object
    140      */
    141     public void testGetInstance02() throws NoSuchAlgorithmException, NoSuchProviderException,
    142             IllegalArgumentException, InvalidAlgorithmParameterException,
    143             CertPathValidatorException {
    144         try {
    145             CertPathValidator.getInstance(null, mProv.getName());
    146             fail("NullPointerException or NoSuchAlgorithmException must be thrown when algorithm is null");
    147         } catch (NullPointerException e) {
    148         } catch (NoSuchAlgorithmException e) {
    149         }
    150         for (int i = 0; i < invalidValues.length; i++) {
    151             try {
    152                 CertPathValidator.getInstance(invalidValues[i], mProv.getName());
    153                 fail("NoSuchAlgorithmException must be thrown (type: ".concat(invalidValues[i])
    154                         .concat(")"));
    155             } catch (NoSuchAlgorithmException e) {
    156             }
    157         }
    158         String prov = null;
    159         for (int i = 0; i < validValues.length; i++) {
    160             try {
    161                 CertPathValidator.getInstance(validValues[i], prov);
    162                 fail("IllegalArgumentException must be thrown when provider is null (type: "
    163                         .concat(validValues[i]).concat(")"));
    164             } catch (IllegalArgumentException e) {
    165             }
    166             try {
    167                 CertPathValidator.getInstance(validValues[i], "");
    168                 fail("IllegalArgumentException must be thrown when provider is empty (type: "
    169                         .concat(validValues[i]).concat(")"));
    170             } catch (IllegalArgumentException e) {
    171             }
    172         }
    173         for (int i = 0; i < validValues.length; i++) {
    174             for (int j = 1; j < invalidValues.length; j++) {
    175                 try {
    176                     CertPathValidator.getInstance(validValues[i], invalidValues[j]);
    177                     fail("NoSuchProviderException must be thrown (type: ".concat(validValues[i])
    178                             .concat(" provider: ").concat(invalidValues[j]).concat(")"));
    179                 } catch (NoSuchProviderException e) {
    180                 }
    181             }
    182         }
    183         CertPathValidator cerPV;
    184         for (int i = 0; i < validValues.length; i++) {
    185             cerPV = CertPathValidator.getInstance(validValues[i], mProv.getName());
    186             assertEquals("Incorrect type", cerPV.getAlgorithm(), validValues[i]);
    187             assertEquals("Incorrect provider", cerPV.getProvider().getName(), mProv.getName());
    188             checkResult(cerPV);
    189         }
    190     }
    191 
    192     /**
    193      * Test for <code>getInstance(String algorithm, Provider provider)</code>
    194      * method Assertions: throws NullPointerException when algorithm is null
    195      * throws NoSuchAlgorithmException when algorithm is not available throws
    196      * IllegalArgumentException when provider is null; returns CertPathValidator
    197      * object
    198      */
    199     public void testGetInstance03() throws NoSuchAlgorithmException, IllegalArgumentException,
    200             InvalidAlgorithmParameterException, CertPathValidatorException {
    201         try {
    202             CertPathValidator.getInstance(null, mProv);
    203             fail("NullPointerException or NoSuchAlgorithmException must be thrown when algorithm is null");
    204         } catch (NullPointerException e) {
    205         } catch (NoSuchAlgorithmException e) {
    206         }
    207         for (int i = 0; i < invalidValues.length; i++) {
    208             try {
    209                 CertPathValidator.getInstance(invalidValues[i], mProv);
    210                 fail("NoSuchAlgorithmException must be thrown (type: ".concat(invalidValues[i])
    211                         .concat(")"));
    212             } catch (NoSuchAlgorithmException e) {
    213             }
    214         }
    215         Provider prov = null;
    216         for (int i = 0; i < validValues.length; i++) {
    217             try {
    218                 CertPathValidator.getInstance(validValues[i], prov);
    219                 fail("IllegalArgumentException must be thrown when provider is null (type: "
    220                         .concat(validValues[i]).concat(")"));
    221             } catch (IllegalArgumentException e) {
    222             }
    223         }
    224         CertPathValidator cerPV;
    225         for (int i = 0; i < validValues.length; i++) {
    226             cerPV = CertPathValidator.getInstance(validValues[i], mProv);
    227             assertEquals("Incorrect type", cerPV.getAlgorithm(), validValues[i]);
    228             assertEquals("Incorrect provider", cerPV.getProvider(), mProv);
    229             checkResult(cerPV);
    230         }
    231     }
    232 
    233     public void testValidate() throws InvalidAlgorithmParameterException, NoSuchAlgorithmException {
    234         MyCertPath mCP = new MyCertPath(new byte[0]);
    235         CertPathParameters params = new PKIXParameters(TestUtils.getTrustAnchorSet());
    236         CertPathValidator certPV = CertPathValidator.getInstance(defaultAlg);
    237         try {
    238             certPV.validate(mCP, params);
    239         } catch (InvalidAlgorithmParameterException e) {
    240             fail("unexpected exception: " + e);
    241         } catch (CertPathValidatorException e) {
    242             fail("unexpected exception: " + e);
    243         }
    244         try {
    245             certPV.validate(null, params);
    246             fail("NullPointerException must be thrown");
    247         } catch (InvalidAlgorithmParameterException e) {
    248             fail("unexpected exception: " + e);
    249         } catch (CertPathValidatorException e) {
    250             // ok
    251         }
    252         try {
    253             certPV.validate(mCP, null);
    254             fail("InvalidAlgorithmParameterException must be thrown");
    255         } catch (InvalidAlgorithmParameterException e) {
    256             // ok
    257         } catch (CertPathValidatorException e) {
    258             fail("unexpected exception");
    259         }
    260 
    261     }
    262 }
    263