/** * @test * @bug 4946388 * @summary Unit test for CertificateRevokedException */ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.cert.CertificateRevokedException; import java.security.cert.CRLReason; import java.security.cert.Extension; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import javax.security.auth.x500.X500Principal; import sun.security.x509.InvalidityDateExtension; public class Basic { public static void main(String[] args) throws Exception { // test ctor for NPE CertificateRevokedException cre = null; try { cre = new CertificateRevokedException(null, null, null, null); throw new Exception("Did not throw expected NullPointerException"); } catch (NullPointerException npe) {} // test getRevocationDate returns clone Date date = Calendar.getInstance().getTime(); long time = date.getTime(); Map<String, Extension> extensions = new HashMap<String, Extension>(); Date invDate = new Date(date.getTime()); extensions.put("2.5.29.24", new InvalidityDateExtension(invDate)); cre = new CertificateRevokedException(date, CRLReason.UNSPECIFIED, new X500Principal("CN=TestCA"), extensions); Date date2 = cre.getRevocationDate(); if (date2 == date) { throw new Exception("getRevocationDate does not return copy"); } // test getRevocationDate returns the same date as specified in ctor if (!date.equals(date2)) { throw new Exception("getRevocationDate returns different date"); } // test ctor copies date date.setTime(777); date2 = cre.getRevocationDate(); if (date2.getTime() != time) { throw new Exception("Constructor did not copy date parameter"); } // test getReason returns same reason as specified in ctor CRLReason reason = cre.getRevocationReason(); if (reason != CRLReason.UNSPECIFIED) { throw new Exception("getRevocationReason returns different reason"); } // test getAuthorityName returns same name as specified in ctor if (!cre.getAuthorityName().equals(new X500Principal("CN=TestCA"))) { throw new Exception("getAuthorityName returns different name"); } // test getInvalidityDate returns invalidity date Date invalidity = cre.getInvalidityDate(); if (invalidity == null) { throw new Exception("getInvalidityDate returned null"); } if (invalidity.getTime() != time) { throw new Exception("getInvalidityDate returned wrong date"); } // test getInvalidityDate copies date invDate.setTime(777); if (invalidity.getTime() != time) { throw new Exception("getInvalidityDate did not return copy of date"); } // test serialization ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(cre); oos.close(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ObjectInputStream ois = new ObjectInputStream(bais); CertificateRevokedException cre2 = (CertificateRevokedException) ois.readObject(); if (cre2.getRevocationDate().getTime() != time) { throw new Exception("deserialized exception returns different date"); } if (cre2.getRevocationReason() != CRLReason.UNSPECIFIED) { throw new Exception("deserialized exception returns different reason"); } if (!cre2.getAuthorityName().equals(new X500Principal("CN=TestCA"))) { throw new Exception("deserialized exception returns different name"); } if (!cre2.getExtensions().keySet().equals(cre.getExtensions().keySet())) { throw new Exception("deserialized exception returns different extensions"); } } }