]> WPIA git - gigi.git/blobdiff - tests/org/cacert/gigi/TestCertificate.java
New Signer Job Table.
[gigi.git] / tests / org / cacert / gigi / TestCertificate.java
index 42b1c2f359171aeb4e349b435cfa2071929945fc..e6cef97b8a0ab096840593c1a8af561773870215 100644 (file)
@@ -2,9 +2,12 @@ package org.cacert.gigi;
 
 import java.io.IOException;
 import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
 import java.net.Socket;
 import java.net.URL;
 import java.security.GeneralSecurityException;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
 import java.security.Principal;
 import java.security.PrivateKey;
 import java.security.cert.X509Certificate;
@@ -29,9 +32,14 @@ public class TestCertificate extends ManagedTest {
                String[] key1 = generateCSR("/CN=testmail@example.com");
                Certificate c = new Certificate(1, "/CN=testmail@example.com", "sha256", key1[1]);
                final PrivateKey pk = PemKey.parsePEMPrivateKey(key1[0]);
-               c.issue();
-               c.waitFor(60000);
+               c.issue().waitFor(60000);
                final X509Certificate ce = c.cert();
+               System.out.println(ce);
+               testLogin(pk, ce, true);
+       }
+
+       private void testLogin(final PrivateKey pk, final X509Certificate ce, boolean success)
+               throws NoSuchAlgorithmException, KeyManagementException, IOException, MalformedURLException {
                KeyManager km = new X509KeyManager() {
 
                        @Override
@@ -75,37 +83,42 @@ public class TestCertificate extends ManagedTest {
                if (connection instanceof HttpsURLConnection) {
                        ((HttpsURLConnection) connection).setSSLSocketFactory(sc.getSocketFactory());
                }
-               assertEquals(302, connection.getResponseCode());
-               assertEquals("https://" + getServerName().replaceFirst("^www.", "secure.") + "/",
-                       connection.getHeaderField("Location"));
+               if (success) {
+                       assertEquals(302, connection.getResponseCode());
+                       assertEquals("https://" + getServerName().replaceFirst("^www.", "secure.").replaceFirst(":443$", "") + "/",
+                               connection.getHeaderField("Location").replaceFirst(":443$", ""));
+               } else {
+                       assertNotEquals(302, connection.getResponseCode());
+                       assertNull(connection.getHeaderField("Location"));
+               }
        }
 
        @Test
        public void testCertLifeCycle() throws IOException, GeneralSecurityException, SQLException, InterruptedException {
                String[] key1 = generateCSR("/CN=testmail@example.com");
                Certificate c = new Certificate(1, "/CN=testmail@example.com", "sha256", key1[1]);
-               testFails(CertificateStatus.DRAFT, c);
-               c.issue();
+               final PrivateKey pk = PemKey.parsePEMPrivateKey(key1[0]);
 
-               testFails(CertificateStatus.SIGNING, c);
-               c.waitFor(60000);
+               testFails(CertificateStatus.DRAFT, c);
+               c.issue().waitFor(60000);
 
                testFails(CertificateStatus.ISSUED, c);
-               c.revoke();
-
-               testFails(CertificateStatus.BEING_REVOKED, c);
-               c.waitFor(60000);
+               X509Certificate cert = c.cert();
+               testLogin(pk, cert, true);
+               c.revoke().waitFor(60000);
 
                testFails(CertificateStatus.REVOKED, c);
+               testLogin(pk, cert, false);
 
        }
 
        private void testFails(CertificateStatus status, Certificate c) throws IOException, GeneralSecurityException,
                SQLException {
+               assertEquals(status, c.getStatus());
                if (status != CertificateStatus.ISSUED) {
                        try {
                                c.revoke();
-                               fail("is in invalid state");
+                               fail(status + " is in invalid state");
                        } catch (IllegalStateException ise) {
 
                        }
@@ -113,7 +126,7 @@ public class TestCertificate extends ManagedTest {
                if (status != CertificateStatus.DRAFT) {
                        try {
                                c.issue();
-                               fail("is in invalid state");
+                               fail(status + " is in invalid state");
                        } catch (IllegalStateException ise) {
 
                        }
@@ -121,7 +134,7 @@ public class TestCertificate extends ManagedTest {
                if (status != CertificateStatus.ISSUED) {
                        try {
                                c.cert();
-                               fail("is in invalid state");
+                               fail(status + " is in invalid state");
                        } catch (IllegalStateException ise) {
 
                        }