From a95fcf745db63e39d16aa3ec34a4d4f00b9b60d5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Wed, 25 Jun 2014 15:18:05 +0200 Subject: [PATCH] Extend test to mbox verifications --- .../gigi/pages/main/RegisterPageTest.java | 81 ++++--------------- .../cacert/gigi/testUtils/ManagedTest.java | 65 ++++++++++++++- .../gigi/testUtils/TestEmailReciever.java | 46 +++++++++-- 3 files changed, 121 insertions(+), 71 deletions(-) diff --git a/tests/org/cacert/gigi/pages/main/RegisterPageTest.java b/tests/org/cacert/gigi/pages/main/RegisterPageTest.java index 51ca6867..fa2e080d 100644 --- a/tests/org/cacert/gigi/pages/main/RegisterPageTest.java +++ b/tests/org/cacert/gigi/pages/main/RegisterPageTest.java @@ -3,54 +3,31 @@ package org.cacert.gigi.pages.main; import static org.junit.Assert.*; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLEncoder; -import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.cacert.gigi.IOUtils; import org.cacert.gigi.InitTruststore; import org.cacert.gigi.testUtils.ManagedTest; import org.cacert.gigi.testUtils.TestEmailReciever.TestMail; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; public class RegisterPageTest extends ManagedTest { - private final URL registerService; static { InitTruststore.run(); HttpURLConnection.setFollowRedirects(false); } - public RegisterPageTest() { - URL u = null; - try { - u = new URL("https://" + getServerName() + "/register"); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - registerService = u; - } @Before public void setUp() throws Exception { } @Test public void testSuccess() throws IOException { - String startError = fetchStartErrorMessage("fname=ab&lname=b&email=" - + URLEncoder.encode("felix+" + System.currentTimeMillis() - + "@dogcraft.de", "UTF-8") - + "&pword1=ap12UI.a'&pword2=ap12UI.a'&day=1&month=1&year=1910&cca_agree=1"); - assertTrue(startError, startError.startsWith("")); + long uniq = System.currentTimeMillis(); + registerUser("ab", "b", "correct" + uniq + "@email.de", "ap12UI.'"); TestMail tm = waitForMail(); - Pattern link = Pattern.compile("http://[^\\s]+(?=\\s)"); - Matcher m = link.matcher(tm.getMessage()); - m.find(); - System.out.println(tm.getSubject()); - System.out.println(m.group(0)); + String link = tm.extractLink(); + assertTrue(link, link.startsWith("http://")); } @Test public void testNoFname() throws IOException { @@ -77,7 +54,6 @@ public class RegisterPageTest extends ManagedTest { @Test public void testNoDay() throws IOException { - System.out.println(registerService); testFailedForm("fname=a&lname=b&email=e&pword1=ap&pword2=ap&month=1&year=1910&cca_agree=1"); } @Test @@ -145,12 +121,11 @@ public class RegisterPageTest extends ManagedTest { .contains("name=\"radius\" value=\"1\" checked=\"checked\">")); } - @Ignore @Test public void testDoubleMail() throws IOException { long uniq = System.currentTimeMillis(); registerUser("RegisterTest", "User", "testmail" + uniq + "@cacert.org", - "registerPW"); + "registerPW'1"); try { registerUser("RegisterTest", "User", "testmail" + uniq + "@cacert.org", "registerPW"); @@ -160,44 +135,22 @@ public class RegisterPageTest extends ManagedTest { } } + @Test + public void testInvalidMailbox() { + getMailReciever().setApproveRegex(Pattern.compile("a")); + long uniq = System.currentTimeMillis(); + try { + registerUser("RegisterTest", "User", "testInvalidMailbox" + uniq + + "@cacert.org", "registerPW"); + throw new Error( + "Registering a user with invalid mailbox must fail."); + } catch (AssertionError e) { + } + } private void testFailedForm(String query) throws IOException { String startError = fetchStartErrorMessage(query); assertTrue(startError, !startError.startsWith("")); } - private String fetchStartErrorMessage(String query) throws IOException { - String d = runRegister(query); - String formFail = "
"; - int idx = d.indexOf(formFail); - assertNotEquals(-1, idx); - String startError = d.substring(idx + formFail.length(), idx + 100) - .trim(); - return startError; - } - public void registerUser(String firstName, String lastName, String email, - String password) { - try { - String query = "fname=" + URLEncoder.encode(firstName, "UTF-8") - + "&lname=" + URLEncoder.encode(lastName, "UTF-8") - + "&email=" + URLEncoder.encode(email, "UTF-8") - + "&pword1=" + URLEncoder.encode(password, "UTF-8") - + "&pword2=" + URLEncoder.encode(password, "UTF-8") - + "&day=1&month=1&year=1910&cca_agree=1"; - String data = fetchStartErrorMessage(query); - assertTrue(data, data.startsWith("
")); - } catch (UnsupportedEncodingException e) { - throw new Error(e); - } catch (IOException e) { - throw new Error(e); - } - } - private String runRegister(String param) throws IOException { - HttpURLConnection uc = (HttpURLConnection) registerService - .openConnection(); - uc.setDoOutput(true); - uc.getOutputStream().write(param.getBytes()); - String d = IOUtils.readURL(uc); - return d; - } } diff --git a/tests/org/cacert/gigi/testUtils/ManagedTest.java b/tests/org/cacert/gigi/testUtils/ManagedTest.java index d59690d7..f591e772 100644 --- a/tests/org/cacert/gigi/testUtils/ManagedTest.java +++ b/tests/org/cacert/gigi/testUtils/ManagedTest.java @@ -1,22 +1,32 @@ package org.cacert.gigi.testUtils; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; + import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; import java.net.InetSocketAddress; +import java.net.URL; +import java.net.URLEncoder; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Properties; import org.cacert.gigi.DevelLauncher; +import org.cacert.gigi.IOUtils; import org.cacert.gigi.testUtils.TestEmailReciever.TestMail; import org.junit.After; import org.junit.AfterClass; import org.junit.BeforeClass; public class ManagedTest { + private final String registerService = "/register"; + private static TestEmailReciever ter; private static Process gigi; private static String url = "localhost:4443"; @@ -106,7 +116,7 @@ public class ManagedTest { @After public void removeMails() { - ter.clearMails(); + ter.reset(); } public TestMail waitForMail() { @@ -116,4 +126,57 @@ public class ManagedTest { throw new Error(e); } } + public static TestEmailReciever getMailReciever() { + return ter; + } + public String runRegister(String param) throws IOException { + HttpURLConnection uc = (HttpURLConnection) new URL("https://" + + getServerName() + registerService).openConnection(); + uc.setDoOutput(true); + uc.getOutputStream().write(param.getBytes()); + String d = IOUtils.readURL(uc); + return d; + } + public String fetchStartErrorMessage(String query) throws IOException { + String d = runRegister(query); + String formFail = "
"; + int idx = d.indexOf(formFail); + assertNotEquals(-1, idx); + String startError = d.substring(idx + formFail.length(), idx + 100) + .trim(); + return startError; + } + + public void registerUser(String firstName, String lastName, String email, + String password) { + try { + String query = "fname=" + URLEncoder.encode(firstName, "UTF-8") + + "&lname=" + URLEncoder.encode(lastName, "UTF-8") + + "&email=" + URLEncoder.encode(email, "UTF-8") + + "&pword1=" + URLEncoder.encode(password, "UTF-8") + + "&pword2=" + URLEncoder.encode(password, "UTF-8") + + "&day=1&month=1&year=1910&cca_agree=1"; + String data = fetchStartErrorMessage(query); + assertTrue(data, data.startsWith("
")); + } catch (UnsupportedEncodingException e) { + throw new Error(e); + } catch (IOException e) { + throw new Error(e); + } + } + public void createVerifiedUser(String firstName, String lastName, + String email, String password) { + registerUser(firstName, lastName, email, password); + try { + TestMail tm = ter.recieve(); + String verifyLink = tm.extractLink(); + String[] parts = verifyLink.split("\\?"); + URL u = new URL("https://" + getServerName() + "/verify" + parts[1]); + u.openStream().close();; + } catch (InterruptedException e) { + throw new Error(e); + } catch (IOException e) { + throw new Error(e); + } + } } diff --git a/tests/org/cacert/gigi/testUtils/TestEmailReciever.java b/tests/org/cacert/gigi/testUtils/TestEmailReciever.java index 53e46162..446d2aad 100644 --- a/tests/org/cacert/gigi/testUtils/TestEmailReciever.java +++ b/tests/org/cacert/gigi/testUtils/TestEmailReciever.java @@ -1,11 +1,14 @@ package org.cacert.gigi.testUtils; import java.io.DataInputStream; +import java.io.DataOutputStream; import java.io.IOException; import java.net.SocketAddress; import java.net.Socket; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public class TestEmailReciever implements Runnable { public class TestMail { @@ -37,10 +40,17 @@ public class TestEmailReciever implements Runnable { public String getReplyto() { return replyto; } + public String extractLink() { + Pattern link = Pattern.compile("http://[^\\s]+(?=\\s)"); + Matcher m = link.matcher(getMessage()); + m.find(); + return m.group(0); + } } private Socket s; private DataInputStream dis; + private DataOutputStream dos; public TestEmailReciever(SocketAddress target) throws IOException { s = new Socket(); @@ -48,6 +58,7 @@ public class TestEmailReciever implements Runnable { s.setKeepAlive(true); s.setSoTimeout(1000 * 60 * 60); dis = new DataInputStream(s.getInputStream()); + dos = new DataOutputStream(s.getOutputStream()); new Thread(this).start(); } LinkedBlockingQueue mails = new LinkedBlockingQueue(); @@ -59,21 +70,44 @@ public class TestEmailReciever implements Runnable { public void run() { try { while (true) { - String to = dis.readUTF(); - String subject = dis.readUTF(); - String message = dis.readUTF(); - String from = dis.readUTF(); - String replyto = dis.readUTF(); - mails.add(new TestMail(to, subject, message, from, replyto)); + String type = dis.readUTF(); + if (type.equals("mail")) { + String to = dis.readUTF(); + String subject = dis.readUTF(); + String message = dis.readUTF(); + String from = dis.readUTF(); + String replyto = dis.readUTF(); + mails.add(new TestMail(to, subject, message, from, replyto)); + } else if (type.equals("challengeAddrBox")) { + String email = dis.readUTF(); + if (approveRegex.matcher(email).matches()) { + System.out.println("approving mbox: " + email); + dos.writeUTF("OK"); + } else { + System.out.println("rejecting mbox: " + email); + dos.writeUTF("FAIL"); + } + dos.flush(); + } else { + System.err.println("Unknown type: " + type); + } } } catch (IOException e) { e.printStackTrace(); } } + Pattern approveRegex = Pattern.compile(".*"); + public void setApproveRegex(Pattern approveRegex) { + this.approveRegex = approveRegex; + } public void clearMails() { mails.clear(); } + public void reset() { + clearMails(); + approveRegex = Pattern.compile(".*"); + } } -- 2.39.2