]> WPIA git - gigi.git/blob - tests/club/wpia/gigi/pages/admin/TestSEAdminPageCertSearch.java
Merge "upd: remove 'browser install'"
[gigi.git] / tests / club / wpia / gigi / pages / admin / TestSEAdminPageCertSearch.java
1 package club.wpia.gigi.pages.admin;
2
3 import static org.hamcrest.CoreMatchers.*;
4 import static org.junit.Assert.*;
5
6 import java.io.IOException;
7 import java.net.URLConnection;
8 import java.net.URLEncoder;
9 import java.security.GeneralSecurityException;
10 import java.security.KeyPair;
11 import java.text.SimpleDateFormat;
12
13 import org.hamcrest.CoreMatchers;
14 import org.junit.Test;
15
16 import club.wpia.gigi.GigiApiException;
17 import club.wpia.gigi.dbObjects.Certificate;
18 import club.wpia.gigi.dbObjects.Certificate.CSRType;
19 import club.wpia.gigi.dbObjects.Certificate.CertificateStatus;
20 import club.wpia.gigi.dbObjects.Certificate.RevocationType;
21 import club.wpia.gigi.dbObjects.Certificate.SANType;
22 import club.wpia.gigi.dbObjects.Digest;
23 import club.wpia.gigi.dbObjects.User;
24 import club.wpia.gigi.output.template.Template;
25 import club.wpia.gigi.pages.account.certs.Certificates;
26 import club.wpia.gigi.pages.admin.support.FindCertPage;
27 import club.wpia.gigi.testUtils.IOUtils;
28 import club.wpia.gigi.testUtils.SEClientTest;
29 import club.wpia.gigi.testUtils.TestEmailReceiver.TestMail;
30 import club.wpia.gigi.util.ServerConstants;
31 import club.wpia.gigi.util.ServerConstants.Host;
32
33 public class TestSEAdminPageCertSearch extends SEClientTest {
34
35     private Certificate c;
36
37     private String certMail;
38
39     private int id;
40
41     public TestSEAdminPageCertSearch() throws IOException, GigiApiException, GeneralSecurityException, InterruptedException {
42         certMail = uniq + "_certowner@example.com";
43         id = createVerifiedUser("fn", "ln", certMail, TEST_PASSWORD);
44         c = createCertificate();
45     }
46
47     @Test
48     public void testSerialSearch() throws IOException {
49         URLConnection uc = post(cookie, FindCertPage.PATH, "certType=serial&process=Next&cert=" + c.getSerial(), 0);
50         assertEquals("https://" + ServerConstants.getHostNamePortSecure(Host.SECURE) + Certificates.SUPPORT_PATH + "/" + c.getSerial(), uc.getHeaderField("Location"));
51     }
52
53     @Test
54     public void testEmailSearch() throws IOException {
55         URLConnection uc = post(cookie, FindCertPage.PATH, "certType=email&process=Next&cert=" + URLEncoder.encode(certMail, "UTF-8"), 0);
56         assertEquals("https://" + ServerConstants.getHostNamePortSecure(Host.SECURE) + Certificates.SUPPORT_PATH + "/" + c.getSerial(), uc.getHeaderField("Location"));
57     }
58
59     @Test
60     public void testDetails() throws IOException {
61         String s = IOUtils.readURL(get(Certificates.SUPPORT_PATH + "/" + c.getSerial()));
62         assertThat(s, CoreMatchers.containsString("SHA512"));
63         assertThat(s, CoreMatchers.containsString(certMail));
64         assertThat(s, CoreMatchers.containsString(c.getSerial()));
65         assertThat(s, CoreMatchers.containsString("ISSUED"));
66     }
67
68     @Test
69     public void testRevoke() throws IOException {
70         URLConnection conn = post(Certificates.SUPPORT_PATH + "/" + c.getSerial(), "action=revoke");
71         assertEquals("https://" + ServerConstants.getHostNamePortSecure(Host.SECURE) + Certificates.SUPPORT_PATH + "/" + c.getSerial(), conn.getHeaderField("Location"));
72         for (int i = 0; i < 2; i++) {
73             TestMail tm = getMailReceiver().receive(i == 0 ? ServerConstants.getSupportMailAddress() : certMail);
74             assertThat(tm.getMessage(), CoreMatchers.containsString(certMail));
75             assertThat(tm.getMessage(), CoreMatchers.containsString(c.getSerial()));
76         }
77         assertEquals(CertificateStatus.REVOKED, c.getStatus());
78
79     }
80
81     @Test
82     public void testShowRevocation() throws GeneralSecurityException, IOException, GigiApiException, InterruptedException {
83         Certificate c1 = createCertificate();
84         await(c1.revoke(RevocationType.SUPPORT));
85         URLConnection uc = post(cookie, FindCertPage.PATH, "certType=email&process=Next&cert=" + URLEncoder.encode(certMail, "UTF-8"), 0);
86         SimpleDateFormat sdf = new SimpleDateFormat(Template.UTC_TIMESTAMP_FORMAT);
87         String revokeDate = sdf.format(c1.getRevocationDate());
88         String result = IOUtils.readURL(uc);
89         assertThat(result, CoreMatchers.containsString(revokeDate));
90         assertThat(result, CoreMatchers.containsString("N/A"));
91     }
92
93     @Test
94     public void testShowDraft() throws GeneralSecurityException, IOException, GigiApiException, InterruptedException {
95         KeyPair kp = generateKeypair();
96         String key = generatePEMCSR(kp, "CN=" + certMail);
97         Certificate c1 = new Certificate(u, u, Certificate.buildDN("CN", certMail), Digest.SHA512, key, CSRType.CSR, getClientProfile(), new Certificate.SubjectAlternateName(SANType.EMAIL, certMail));
98         URLConnection uc = post(cookie, FindCertPage.PATH, "certType=email&process=Next&cert=" + URLEncoder.encode(certMail, "UTF-8"), 0);
99         String result = IOUtils.readURL(uc);
100         assertThat(result, CoreMatchers.containsString(c.getSerial()));
101         assertThat(result, CoreMatchers.containsString("Draft"));
102
103         await(c1.issue(null, "2y", u));
104         uc = post(cookie, FindCertPage.PATH, "certType=email&process=Next&cert=" + URLEncoder.encode(certMail, "UTF-8"), 0);
105         result = IOUtils.readURL(uc);
106         assertThat(result, CoreMatchers.containsString(c.getSerial()));
107         assertThat(result, CoreMatchers.containsString(c1.getSerial()));
108         assertThat(result, not(CoreMatchers.containsString("Draft")));
109     }
110
111     private Certificate createCertificate() throws GeneralSecurityException, IOException, GigiApiException, InterruptedException {
112         User u1 = User.getById(id);
113         KeyPair kp = generateKeypair();
114         String key = generatePEMCSR(kp, "CN=" + certMail);
115         Certificate c1 = new Certificate(u1, u1, Certificate.buildDN("CN", certMail), Digest.SHA512, key, CSRType.CSR, getClientProfile(), new Certificate.SubjectAlternateName(SANType.EMAIL, certMail));
116         await(c1.issue(null, "2y", u));
117         return c1;
118     }
119 }