/* DigiDoc4J library
*
* This software is released under either the GNU Library General Public
* License (see LICENSE.LGPL).
*
* Note that the only valid version of the LGPL license as far as this
* project is concerned is the original GNU Library General Public License
* Version 2.1, February 1999
*/
package org.digidoc4j;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
import java.io.IOException;
import java.security.cert.CertificateExpiredException;
import java.security.cert.CertificateNotYetValidException;
import java.security.cert.X509Certificate;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import static java.util.Arrays.asList;
import static org.digidoc4j.X509Cert.SubjectName.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
public class X509CertTest {
private static X509Cert cert;
private final int ONE_DAY = 1000 * 60 * 60 * 24;
private final SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
@BeforeClass
public static void setUp() throws Exception {
cert = new X509Cert("testFiles/signout.pem");
}
@Test
public void testGetX509Certificate() throws Exception {
X509Certificate x509Certificate = cert.getX509Certificate();
assertEquals("SERIALNUMBER=11404176865, GIVENNAME=MÄRÜ-LÖÖZ, SURNAME=ŽÕRINÜWŠKY, " +
"CN=\"ŽÕRINÜWŠKY,MÄRÜ-LÖÖZ,11404176865\", OU=digital signature, O=ESTEID, C=EE",
x509Certificate.getSubjectDN().getName());
}
@Test
public void testGetSerialNumber() {
assertEquals("530be41bbc597c44570e2b7c13bcfa0c", cert.getSerial());
}
@Test
public void testGetIssuerName() {
assertEquals("cn=test of esteid-sk 2015, oid.2.5.4.97=ntree-10747013, o=as sertifitseerimiskeskus, c=ee",
cert.issuerName().toLowerCase());
}
@Test
public void testGetIssuerNameByPart() {
assertNull(cert.issuerName(X509Cert.Issuer.EMAILADDRESS));
assertEquals("as sertifitseerimiskeskus", cert.issuerName(X509Cert.Issuer.O).toLowerCase());
assertEquals("test of esteid-sk 2015", cert.issuerName(X509Cert.Issuer.CN).toLowerCase());
assertEquals("ee", cert.issuerName(X509Cert.Issuer.C).toLowerCase());
}
@Test
public void testGetPolicies() throws IOException {
assertEquals(1, cert.getCertificatePolicies().size());
}
@Test
public void testIsValidAtSpecifiedDate() {
assertTrue(cert.isValid(new Date()));
}
@Test
public void testIsNotValidYet() throws ParseException {
Date certValidFrom = dateFormat.parse("17.04.2014");
assertFalse(cert.isValid(new Date(certValidFrom.getTime() - ONE_DAY)));
}
@Test
public void testIsNoLongerValid() throws ParseException {
Date certValidFrom = dateFormat.parse("12.04.2016");
assertFalse(cert.isValid(new Date(certValidFrom.getTime() + ONE_DAY)));
}
@Test
public void testIsValidThrowsCertificateExpiredException() throws Exception {
X509Certificate mock = mock(X509Certificate.class);
Mockito.doThrow(new CertificateExpiredException()).when(mock).checkValidity();
X509Cert x509Cert = new X509Cert(mock);
x509Cert.isValid();
}
@Test
public void testIsValidThrowsCertificateNotYetValidException() throws Exception {
X509Certificate mock = mock(X509Certificate.class);
Mockito.doThrow(new CertificateNotYetValidException()).when(mock).checkValidity();
X509Cert x509Cert = new X509Cert(mock);
x509Cert.isValid();
}
@Test
public void testIsCertValidToday() {
assertTrue(cert.isValid());
}
@Test
public void testKeyUsage() {
assertEquals(asList(X509Cert.KeyUsage.NON_REPUDIATION), cert.getKeyUsages());
}
@Test
public void testGetPartOfSubjectName() throws Exception {
assertEquals("11404176865", cert.getSubjectName(SERIALNUMBER));
assertEquals("märü-lööz", cert.getSubjectName(GIVENNAME).toLowerCase());
assertEquals("žõrinüwšky", cert.getSubjectName(SURNAME).toLowerCase());
assertEquals("\"žõrinüwšky,märü-lööz,11404176865\"", cert.getSubjectName(CN).toLowerCase());
assertEquals("digital signature", cert.getSubjectName(OU).toLowerCase());
assertEquals("esteid", cert.getSubjectName(O).toLowerCase());
assertEquals("ee", cert.getSubjectName(C).toLowerCase());
}
@Test
public void testGetSubjectName() throws Exception {
assertEquals("SERIALNUMBER=11404176865, GIVENNAME=MÄRÜ-LÖÖZ, SURNAME=ŽÕRINÜWŠKY, CN=\"ŽÕRINÜWŠKY,MÄRÜ-LÖÖZ," +
"11404176865\", OU=digital signature, O=ESTEID, C=EE", cert.getSubjectName());
}
}