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 Vladimir N. Molotkov
     20 * @version $Revision$
     21 */
     22 
     23 package tests.security.cert;
     24 
     25 import java.io.ObjectStreamException;
     26 import java.security.cert.CertPath;
     27 import java.security.cert.CertificateEncodingException;
     28 import java.util.Arrays;
     29 import junit.framework.TestCase;
     30 import org.apache.harmony.security.tests.support.cert.MyCertPath;
     31 import org.apache.harmony.security.tests.support.cert.MyFailingCertPath;
     32 import org.apache.harmony.security.tests.support.cert.TestUtils;
     33 import org.apache.harmony.testframework.serialization.SerializationTest;
     34 
     35 /**
     36  * Tests for <code>CertPath</code> fields and methods
     37  *
     38  */
     39 public class CertPathTest extends TestCase {
     40     /**
     41      * Meaningless cert path encoding just for testing purposes
     42      */
     43     private static final byte[] testEncoding = new byte[] {
     44             (byte)1, (byte)2, (byte)3, (byte)4, (byte)5
     45     };
     46 
     47     private static final byte[] testEncoding1 = new byte[] {
     48         (byte)1, (byte)2, (byte)3, (byte)4, (byte)5, (byte)6
     49     };
     50 
     51     //
     52     // Tests
     53     //
     54 
     55     /**
     56      * Test for <code>CertPath(String type)</code> method<br>
     57      * Assertion: returns hash of the <code>Certificate</code> instance
     58      */
     59     public final void testCertPath() {
     60         try {
     61             CertPath cp1 = new MyCertPath(testEncoding);
     62             assertEquals("MyEncoding", cp1.getType());
     63             assertTrue(Arrays.equals(testEncoding, cp1.getEncoded()));
     64         } catch (CertificateEncodingException e) {
     65             fail("Unexpected CertificateEncodingException " + e.getMessage());
     66         }
     67 
     68         try {
     69             CertPath cp1 = new MyCertPath(null);
     70         } catch (Exception e) {
     71             fail("Unexpected exception " + e.getMessage());
     72         }
     73     }
     74 
     75     /**
     76      * Test for <code>hashCode()</code> method<br>
     77      * Assertion: returns hash of the <code>Certificate</code> instance
     78      */
     79     public final void testHashCode() {
     80         CertPath cp1 = new MyCertPath(testEncoding);
     81         CertPath cp2 = new MyCertPath(testEncoding);
     82         CertPath cp3 = new MyCertPath(testEncoding1);
     83 
     84         assertTrue(cp1.hashCode() == cp2.hashCode());
     85         assertTrue(cp1.hashCode() != cp3.hashCode());
     86     }
     87 
     88     /**
     89      * Test for <code>hashCode()</code> method<br>
     90      * Assertion: hash code of equal objects should be the same
     91      */
     92     public final void testHashCodeEqualsObject() {
     93         CertPath cp1 = new MyCertPath(testEncoding);
     94         CertPath cp2 = new MyCertPath(testEncoding);
     95         assertTrue((cp1.hashCode() == cp2.hashCode()) && cp1.equals(cp2));
     96     }
     97 
     98     /**
     99      * Test for <code>getType()</code> method<br>
    100      * Assertion: returns cert path type
    101      */
    102     public final void testGetType() {
    103         assertEquals("MyEncoding", new MyCertPath(testEncoding).getType());
    104     }
    105 
    106     /**
    107      * Test #1 for <code>equals(Object)</code> method<br>
    108      * Assertion: object equals to itself
    109      */
    110     public final void testEqualsObject01() {
    111         CertPath cp1 = new MyCertPath(testEncoding);
    112         assertTrue(cp1.equals(cp1));
    113     }
    114 
    115     /**
    116      * Test for <code>equals(Object)</code> method<br>
    117      * Assertion: object equals to other <code>CertPath</code>
    118      * instance with the same state
    119      */
    120     public final void testEqualsObject02() {
    121         CertPath cp1 = new MyCertPath(testEncoding);
    122         CertPath cp2 = new MyCertPath(testEncoding);
    123         assertTrue(cp1.equals(cp2) && cp2.equals(cp1));
    124     }
    125 
    126     /**
    127      * Test for <code>equals(Object)</code> method<br>
    128      * Assertion: object not equals to <code>null</code>
    129      */
    130     public final void testEqualsObject03() {
    131         CertPath cp1 = new MyCertPath(testEncoding);
    132         assertFalse(cp1.equals(null));
    133     }
    134 
    135     /**
    136      * Test for <code>equals(Object)</code> method<br>
    137      * Assertion: object not equals to other which is not
    138      * instance of <code>CertPath</code>
    139      */
    140     public final void testEqualsObject04() {
    141         CertPath cp1 = new MyCertPath(testEncoding);
    142         assertFalse(cp1.equals("MyEncoding"));
    143     }
    144 
    145     /**
    146      * Test for <code>toString()</code> method<br>
    147      * Assertion: returns string representation of
    148      * <code>CertPath</code> object
    149      */
    150     public final void testToString() {
    151         CertPath cp1 = new MyCertPath(testEncoding);
    152         assertNotNull(cp1.toString());
    153     }
    154 
    155     //
    156     // the following tests just call methods
    157     // that are abstract in <code>CertPath</code>
    158     // (So they just like signature tests)
    159     //
    160 
    161     /**
    162      * This test just calls <code>getCertificates()</code> method<br>
    163      */
    164     public final void testGetCertificates() {
    165         CertPath cp1 = new MyCertPath(testEncoding);
    166         cp1.getCertificates();
    167     }
    168 
    169     /**
    170      * This test just calls <code>getEncoded()</code> method<br>
    171      *
    172      * @throws CertificateEncodingException
    173      */
    174     public final void testGetEncoded() throws CertificateEncodingException {
    175         CertPath cp1 = new MyCertPath(testEncoding);
    176         cp1.getEncoded();
    177     }
    178 
    179     /**
    180      * This test just calls <code>getEncoded(String)</code> method<br>
    181      *
    182      * @throws CertificateEncodingException
    183      */
    184     public final void testGetEncodedString() throws CertificateEncodingException {
    185         CertPath cp1 = new MyCertPath(testEncoding);
    186         cp1.getEncoded("MyEncoding");
    187     }
    188 
    189     /**
    190      * This test just calls <code>getEncodings()</code> method<br>
    191      */
    192     public final void testGetEncodings() {
    193         CertPath cp1 = new MyCertPath(testEncoding);
    194         cp1.getEncodings();
    195     }
    196 
    197     /**
    198      * This test just calls <code>writeReplace()</code> method<br>
    199      */
    200     public final void testWriteReplace() {
    201         try {
    202             MyCertPath cp1 = new MyCertPath(testEncoding);
    203             Object obj = cp1.writeReplace();
    204             assertTrue(obj.toString().contains(
    205                     "java.security.cert.CertPath$CertPathRep"));
    206         } catch (ObjectStreamException e) {
    207             fail("Unexpected ObjectStreamException " + e.getMessage());
    208         }
    209     }
    210 
    211     public final void testWriteReplace_ObjectStreamException() {
    212         try {
    213             MyFailingCertPath cp = new MyFailingCertPath(testEncoding);
    214             Object obj = cp.writeReplace();
    215             fail("expected ObjectStreamException");
    216         } catch (ObjectStreamException e) {
    217             // ok
    218         }
    219     }
    220 
    221     /**
    222      * serialization/deserialization compatibility.
    223      */
    224     public void testSerializationSelf() throws Exception {
    225         TestUtils.initCertPathSSCertChain();
    226         CertPath certPath = TestUtils.buildCertPathSSCertChain();
    227 
    228         SerializationTest.verifySelf(certPath);
    229     }
    230 
    231     /**
    232      * serialization/deserialization compatibility with RI.
    233      */
    234     public void testSerializationCompatibility() throws Exception {
    235         TestUtils.initCertPathSSCertChain();
    236         CertPath certPath = TestUtils.buildCertPathSSCertChain();
    237 
    238         SerializationTest.verifyGolden(this, certPath);
    239     }
    240 }
    241