import org.cacert.gigi.dbObjects.Certificate;
import org.cacert.gigi.dbObjects.Certificate.CSRType;
import org.cacert.gigi.dbObjects.CertificateProfile;
+import org.cacert.gigi.dbObjects.Digest;
import org.cacert.gigi.dbObjects.User;
import org.cacert.gigi.pages.account.domain.DomainOverview;
import org.cacert.gigi.testUtils.IOUtils;
public class TestSSL extends PingTest {
+ public abstract static class AsyncTask<T> {
+
+ T res;
+
+ Thread runner;
+
+ Exception ex;
+
+ public T join() throws InterruptedException {
+ runner.join();
+ if (ex != null) {
+ throw new Error(ex);
+ }
+ return res;
+ }
+
+ public void start() {
+ runner = new Thread() {
+
+ @Override
+ public void run() {
+ try {
+ res = AsyncTask.this.run();
+ } catch (Exception e) {
+ ex = e;
+ }
+ }
+ };
+ runner.start();
+ }
+
+ public abstract T run() throws Exception;
+
+ }
+
private KeyPair kp;
private Certificate c;
initailizeDomainForm(u);
createCertificate(test, CertificateProfile.getByName(sslVariant == 1 ? "client" : "server"));
- SSLServerSocket sss = createSSLServer(kp.getPrivate(), c.cert());
+ final SSLServerSocket sss = createSSLServer(kp.getPrivate(), c.cert());
int port = sss.getLocalPort();
- SSLServerSocket sss2 = createSSLServer(kp.getPrivate(), c.cert());
+ final SSLServerSocket sss2 = createSSLServer(kp.getPrivate(), c.cert());
int port2 = sss2.getLocalPort();
if (sslVariant == 3 || sslVariant == 2) {
sss2.close();
"&adddomain&csrf=" + csrf;
URL u2 = sendDomainForm(u, content);
boolean firstSucceeds = sslVariant != 0 && sslVariant != 2;
- assertTrue(firstSucceeds ^ acceptSSLServer(sss));
+ AsyncTask<Boolean> ass = new AsyncTask<Boolean>() {
+
+ @Override
+ public Boolean run() throws Exception {
+ return acceptSSLServer(sss);
+ }
+ };
+ ass.start();
+ System.out.println(port + " and " + port2 + " ready");
+ System.err.println(port + " and " + port2 + " ready");
+ boolean accept2 = acceptSSLServer(sss2);
+ boolean accept1 = ass.join();
+ assertTrue(firstSucceeds ^ accept1);
boolean secondsSucceeds = sslVariant != 0;
- assertTrue(secondsSucceeds ^ acceptSSLServer(sss2));
+ assertTrue(secondsSucceeds ^ accept2);
TestMail mail = getMailReciever().receive();
if (emailVariant == 0) {
private void createCertificate(String test, CertificateProfile profile) throws GeneralSecurityException, IOException, SQLException, InterruptedException, GigiApiException {
kp = generateKeypair();
String csr = generatePEMCSR(kp, "CN=" + test);
- c = new Certificate(User.getById(id), Certificate.buildDN("CN", test), "sha256", csr, CSRType.CSR, profile);
- c.issue(null, "2y").waitFor(60000);
+ User u = User.getById(id);
+ c = new Certificate(u, u, Certificate.buildDN("CN", test), Digest.SHA256, csr, CSRType.CSR, profile);
+ c.issue(null, "2y", u).waitFor(60000);
}
private boolean acceptSSLServer(SSLServerSocket sss) throws IOException {
return (SSLServerSocket) sssf.createServerSocket(0);
}
+ public static void main(String[] args) throws Exception {
+ initEnvironment();
+ TestSSL t1 = new TestSSL();
+ t1.sslAndMailSuccess();
+ tearDownServer();
+ }
+
}