]> WPIA git - gigi.git/blobdiff - tests/org/cacert/gigi/testUtils/ManagedTest.java
UPD: Abstracted web interactions
[gigi.git] / tests / org / cacert / gigi / testUtils / ManagedTest.java
index 9e077c60115885e2fef69dacb7e8dc6f0b21b957..d7a5fcac9dba458d5ce7b09a966b2f1c47e88dfe 100644 (file)
@@ -1,8 +1,6 @@
 package org.cacert.gigi.testUtils;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
@@ -47,6 +45,11 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;
 
 public class ManagedTest {
+       /**
+        * Some password that fullfills the password criteria.
+        */
+       protected static final String TEST_PASSWORD = "xvXV12°§";
+
        private final String registerService = "/register";
 
        private static TestEmailReciever ter;
@@ -191,7 +194,9 @@ public class ManagedTest {
        public String fetchStartErrorMessage(String d) throws IOException {
                String formFail = "<div class='formError'>";
                int idx = d.indexOf(formFail);
-               assertNotEquals(-1, idx);
+               if (idx == -1) {
+                       return null;
+               }
                String startError = d.substring(idx + formFail.length(), idx + 100).trim();
                return startError;
        }
@@ -279,6 +284,15 @@ public class ManagedTest {
                return headerField.substring(0, headerField.indexOf(';'));
        }
 
+       public static final String SECURE_REFERENCE = "/account/certs/email";
+
+       public boolean isLoggedin(String cookie) throws IOException {
+               URL u = new URL("https://" + getServerName() + SECURE_REFERENCE);
+               HttpURLConnection huc = (HttpURLConnection) u.openConnection();
+               huc.addRequestProperty("Cookie", cookie);
+               return huc.getResponseCode() == 200;
+       }
+
        public String login(String email, String pw) throws IOException {
                URL u = new URL("https://" + getServerName() + "/login");
                HttpURLConnection huc = (HttpURLConnection) u.openConnection();
@@ -293,6 +307,21 @@ public class ManagedTest {
 
        public String login(final PrivateKey pk, final X509Certificate ce) throws NoSuchAlgorithmException,
                KeyManagementException, IOException, MalformedURLException {
+
+               HttpURLConnection connection = (HttpURLConnection) new URL("https://"
+                       + getServerName().replaceFirst("^www.", "secure.") + "/login").openConnection();
+               authenticateClientCert(pk, ce, connection);
+               if (connection.getResponseCode() == 302) {
+                       assertEquals("https://" + getServerName().replaceFirst("^www.", "secure.").replaceFirst(":443$", "") + "/",
+                               connection.getHeaderField("Location").replaceFirst(":443$", ""));
+                       return stripCookie(connection.getHeaderField("Set-Cookie"));
+               } else {
+                       return null;
+               }
+       }
+
+       public void authenticateClientCert(final PrivateKey pk, final X509Certificate ce, HttpURLConnection connection)
+               throws NoSuchAlgorithmException, KeyManagementException {
                KeyManager km = new X509KeyManager() {
 
                        @Override
@@ -330,19 +359,9 @@ public class ManagedTest {
                };
                SSLContext sc = SSLContext.getInstance("TLS");
                sc.init(new KeyManager[] { km }, null, null);
-
-               HttpURLConnection connection = (HttpURLConnection) new URL("https://"
-                       + getServerName().replaceFirst("^www.", "secure.") + "/login").openConnection();
                if (connection instanceof HttpsURLConnection) {
                        ((HttpsURLConnection) connection).setSSLSocketFactory(sc.getSocketFactory());
                }
-               if (connection.getResponseCode() == 302) {
-                       assertEquals("https://" + getServerName().replaceFirst("^www.", "secure.").replaceFirst(":443$", "") + "/",
-                               connection.getHeaderField("Location").replaceFirst(":443$", ""));
-                       return stripCookie(connection.getHeaderField("Set-Cookie"));
-               } else {
-                       return null;
-               }
        }
 
        public String getCSRF(URLConnection u) throws IOException {
@@ -369,4 +388,22 @@ public class ManagedTest {
                return parts;
        }
 
+       public String executeBasicWebInteraction(String cookie, String path, String query) throws IOException,
+               MalformedURLException, UnsupportedEncodingException {
+               URLConnection uc = new URL("https://" + getServerName() + path).openConnection();
+               uc.addRequestProperty("Cookie", cookie);
+               String csrf = getCSRF(uc);
+
+               uc = new URL("https://" + getServerName() + path).openConnection();
+               uc.addRequestProperty("Cookie", cookie);
+               uc.setDoOutput(true);
+               OutputStream os = uc.getOutputStream();
+               os.write(("csrf=" + URLEncoder.encode(csrf, "UTF-8") + "&" //
+               + query//
+               ).getBytes());
+               os.flush();
+               String error = fetchStartErrorMessage(IOUtils.readURL(uc));
+               return error;
+       }
+
 }