From 16316c8617f9da0b1e20ad0f54ce33e381f4da39 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Sun, 10 Jul 2016 13:45:26 +0200 Subject: [PATCH] add: testType for business-only tests. This helps to clean up several tests. Change-Id: Ief75f96307f102621402f0b097181126404d6ad7 --- tests/org/cacert/gigi/TestDomain.java | 40 ++--- tests/org/cacert/gigi/TestObjectCache.java | 11 +- tests/org/cacert/gigi/TestOrga.java | 4 +- tests/org/cacert/gigi/TestUser.java | 12 +- .../cacert/gigi/TestUserGroupMembership.java | 6 +- .../cacert/gigi/dbObjects/TestAssurance.java | 7 +- tests/org/cacert/gigi/dbObjects/TestCATS.java | 12 +- tests/org/cacert/gigi/email/TestSendmail.java | 3 +- .../cacert/gigi/testUtils/BusinessTest.java | 150 ++++++++++++++++++ .../gigi/testUtils/ClientBusinessTest.java | 20 +++ .../cacert/gigi/testUtils/ConfiguredTest.java | 79 ++++++++- .../cacert/gigi/testUtils/MailReceiver.java | 19 +++ .../cacert/gigi/testUtils/ManagedTest.java | 64 +------- .../gigi/testUtils/TestEmailReceiver.java | 4 +- tests/org/cacert/gigi/util/TestNotary.java | 17 +- 15 files changed, 319 insertions(+), 129 deletions(-) create mode 100644 tests/org/cacert/gigi/testUtils/BusinessTest.java create mode 100644 tests/org/cacert/gigi/testUtils/ClientBusinessTest.java create mode 100644 tests/org/cacert/gigi/testUtils/MailReceiver.java diff --git a/tests/org/cacert/gigi/TestDomain.java b/tests/org/cacert/gigi/TestDomain.java index 91f29c7a..285fca9a 100644 --- a/tests/org/cacert/gigi/TestDomain.java +++ b/tests/org/cacert/gigi/TestDomain.java @@ -3,34 +3,26 @@ package org.cacert.gigi; import static org.junit.Assert.*; import org.cacert.gigi.dbObjects.Domain; -import org.cacert.gigi.dbObjects.User; -import org.cacert.gigi.testUtils.ManagedTest; +import org.cacert.gigi.testUtils.ClientBusinessTest; import org.junit.Test; -public class TestDomain extends ManagedTest { - - private User us; - - public TestDomain() { - int uid = createVerifiedUser("fn", "ln", createUniqueName() + "pr@test-email.de", TEST_PASSWORD); - us = User.getById(uid); - } +public class TestDomain extends ClientBusinessTest { @Test public void testDomain() throws InterruptedException, GigiApiException { - assertEquals(0, us.getDomains().length); - Domain d = new Domain(us, us, "v1example.org"); - Domain[] domains = us.getDomains(); + assertEquals(0, u.getDomains().length); + Domain d = new Domain(u, u, "v1example.org"); + Domain[] domains = u.getDomains(); assertEquals(1, domains.length); assertEquals("v1example.org", domains[0].getSuffix()); - assertEquals(domains[0].getOwner().getId(), us.getId()); + assertEquals(domains[0].getOwner().getId(), u.getId()); assertNotEquals(0, domains[0].getId()); assertNotEquals(0, d.getId()); assertEquals(d.getId(), domains[0].getId()); - new Domain(us, us, "v2-example.org"); + new Domain(u, u, "v2-example.org"); - domains = us.getDomains(); + domains = u.getDomains(); assertEquals(2, domains.length); if ( !domains[1].getSuffix().equals("v2-example.org")) { Domain d1 = domains[0]; @@ -38,8 +30,8 @@ public class TestDomain extends ManagedTest { domains[1] = d1; } assertEquals("v2-example.org", domains[1].getSuffix()); - assertEquals(domains[0].getOwner().getId(), us.getId()); - assertEquals(domains[1].getOwner().getId(), us.getId()); + assertEquals(domains[0].getOwner().getId(), u.getId()); + assertEquals(domains[1].getOwner().getId(), u.getId()); assertNotEquals(0, domains[0].getId()); assertNotEquals(0, d.getId()); assertEquals(d.getId(), domains[0].getId()); @@ -48,9 +40,9 @@ public class TestDomain extends ManagedTest { @Test public void testDoubleDomain() throws InterruptedException, GigiApiException { - new Domain(us, us, "dub-example.org"); + new Domain(u, u, "dub-example.org"); try { - new Domain(us, us, "dub-example.org"); + new Domain(u, u, "dub-example.org"); fail("expected exception, was able to insert domain (with different case) a second time"); } catch (GigiApiException e) { // expected @@ -59,10 +51,10 @@ public class TestDomain extends ManagedTest { @Test public void testDoubleDomainCase() throws InterruptedException, GigiApiException { - Domain d = new Domain(us, us, "dub2-ExaMple.Org"); + Domain d = new Domain(u, u, "dub2-ExaMple.Org"); assertEquals("dub2-example.org", d.getSuffix()); try { - new Domain(us, us, "duB2-eXample.oRG"); + new Domain(u, u, "duB2-eXample.oRG"); fail("expected exception, was able to insert domain (with different case) a second time"); } catch (GigiApiException e) { // expected @@ -71,9 +63,9 @@ public class TestDomain extends ManagedTest { @Test public void testDoubleDomainDelete() throws InterruptedException, GigiApiException { - Domain d = new Domain(us, us, "delexample.org"); + Domain d = new Domain(u, u, "delexample.org"); d.delete(); - new Domain(us, us, "delexample.org"); + new Domain(u, u, "delexample.org"); } } diff --git a/tests/org/cacert/gigi/TestObjectCache.java b/tests/org/cacert/gigi/TestObjectCache.java index d2a04595..69bd4390 100644 --- a/tests/org/cacert/gigi/TestObjectCache.java +++ b/tests/org/cacert/gigi/TestObjectCache.java @@ -11,17 +11,15 @@ import org.cacert.gigi.dbObjects.Domain; import org.cacert.gigi.dbObjects.EmailAddress; import org.cacert.gigi.dbObjects.Name; import org.cacert.gigi.dbObjects.User; -import org.cacert.gigi.testUtils.ManagedTest; +import org.cacert.gigi.testUtils.ClientBusinessTest; import org.cacert.gigi.util.DayDate; import org.junit.Test; -public class TestObjectCache extends ManagedTest { - - int uid = createVerifiedUser("fname", "lname", createUniqueName() + "@example.com", TEST_PASSWORD); +public class TestObjectCache extends ClientBusinessTest { @Test public void testUserCache() throws SQLException, GigiApiException { - assertThat(User.getById(uid), is(sameInstance(User.getById(uid)))); + assertThat(User.getById(id), is(sameInstance(User.getById(id)))); Calendar c = Calendar.getInstance(); c.set(1950, 1, 1, 0, 0, 0); @@ -35,7 +33,6 @@ public class TestObjectCache extends ManagedTest { @Test public void testDomainCache() throws GigiApiException { - User u = User.getById(uid); Domain d = new Domain(u, u, "example.org"); assertThat(d, is(sameInstance(Domain.getById(d.getId())))); @@ -44,7 +41,7 @@ public class TestObjectCache extends ManagedTest { @Test public void testEmailCache() throws GigiApiException { - EmailAddress em = new EmailAddress(User.getById(uid), createUniqueName() + "@example.org", Locale.ENGLISH); + EmailAddress em = new EmailAddress(u, createUniqueName() + "@example.org", Locale.ENGLISH); assertThat(em, is(sameInstance(EmailAddress.getById(em.getId())))); assertThat(EmailAddress.getById(em.getId()), is(sameInstance(EmailAddress.getById(em.getId())))); diff --git a/tests/org/cacert/gigi/TestOrga.java b/tests/org/cacert/gigi/TestOrga.java index 91afa2e7..b1a23129 100644 --- a/tests/org/cacert/gigi/TestOrga.java +++ b/tests/org/cacert/gigi/TestOrga.java @@ -7,10 +7,10 @@ import java.io.IOException; import org.cacert.gigi.dbObjects.Group; import org.cacert.gigi.dbObjects.Organisation; import org.cacert.gigi.dbObjects.User; -import org.cacert.gigi.testUtils.ManagedTest; +import org.cacert.gigi.testUtils.BusinessTest; import org.junit.Test; -public class TestOrga extends ManagedTest { +public class TestOrga extends BusinessTest { @Test public void testAddRm() throws GigiApiException, IOException { diff --git a/tests/org/cacert/gigi/TestUser.java b/tests/org/cacert/gigi/TestUser.java index a3dfb777..f3702b04 100644 --- a/tests/org/cacert/gigi/TestUser.java +++ b/tests/org/cacert/gigi/TestUser.java @@ -11,11 +11,11 @@ import org.cacert.gigi.dbObjects.Domain; import org.cacert.gigi.dbObjects.EmailAddress; import org.cacert.gigi.dbObjects.Name; import org.cacert.gigi.dbObjects.User; -import org.cacert.gigi.testUtils.ManagedTest; +import org.cacert.gigi.testUtils.BusinessTest; import org.cacert.gigi.util.DayDate; import org.junit.Test; -public class TestUser extends ManagedTest { +public class TestUser extends BusinessTest { @Test public void testStoreAndLoad() throws SQLException, GigiApiException { @@ -30,7 +30,7 @@ public class TestUser extends ManagedTest { } @Test - public void testWebStoreAndLoad() throws SQLException { + public void testWebStoreAndLoad() throws SQLException, GigiApiException { int id = createVerifiedUser("aä", "b", createUniqueName() + "a@email.org", TEST_PASSWORD); Name u = User.getById(id).getName(); @@ -41,7 +41,7 @@ public class TestUser extends ManagedTest { } @Test - public void testAssurerUtilMethods() throws SQLException { + public void testAssurerUtilMethods() throws SQLException, GigiApiException { int id = createAssuranceUser("aä", "b", createUniqueName() + "a@email.org", TEST_PASSWORD); User u = User.getById(id); @@ -112,7 +112,7 @@ public class TestUser extends ManagedTest { } @Test - public void testGetByMail() { + public void testGetByMail() throws GigiApiException { String email = createUniqueName() + "a@email.org"; int id = createVerifiedUser("aä", "b", email, TEST_PASSWORD); User emailUser = User.getByEmail(email); @@ -121,7 +121,7 @@ public class TestUser extends ManagedTest { } @Test - public void testNoCats() { + public void testNoCats() throws GigiApiException { String email = createUniqueName() + "a@email.org"; createVerifiedUser("aä", "b", email, TEST_PASSWORD); User emailUser = User.getByEmail(email); diff --git a/tests/org/cacert/gigi/TestUserGroupMembership.java b/tests/org/cacert/gigi/TestUserGroupMembership.java index 7ac06ff3..32bb1a99 100644 --- a/tests/org/cacert/gigi/TestUserGroupMembership.java +++ b/tests/org/cacert/gigi/TestUserGroupMembership.java @@ -13,10 +13,10 @@ import org.cacert.gigi.database.GigiResultSet; import org.cacert.gigi.dbObjects.Group; import org.cacert.gigi.dbObjects.ObjectCache; import org.cacert.gigi.dbObjects.User; -import org.cacert.gigi.testUtils.ManagedTest; +import org.cacert.gigi.testUtils.BusinessTest; import org.junit.Test; -public class TestUserGroupMembership extends ManagedTest { +public class TestUserGroupMembership extends BusinessTest { private final Group ttpGroup = Group.getByString("ttp-assurer"); @@ -99,7 +99,7 @@ public class TestUserGroupMembership extends ManagedTest { } @Test - public void testListGroup() { + public void testListGroup() throws GigiApiException { Group g = Group.getByString("supporter"); int start = g.getMembers(0, 10).length; User ux = User.getById(createVerifiedUser("fn", "ln", createUniqueName() + "@example.org", TEST_PASSWORD)); diff --git a/tests/org/cacert/gigi/dbObjects/TestAssurance.java b/tests/org/cacert/gigi/dbObjects/TestAssurance.java index e7ea35e1..d55f0797 100644 --- a/tests/org/cacert/gigi/dbObjects/TestAssurance.java +++ b/tests/org/cacert/gigi/dbObjects/TestAssurance.java @@ -5,11 +5,12 @@ import static org.junit.Assert.*; import java.io.IOException; import java.sql.Timestamp; +import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.GigiPreparedStatement; -import org.cacert.gigi.testUtils.ManagedTest; +import org.cacert.gigi.testUtils.BusinessTest; import org.junit.Test; -public class TestAssurance extends ManagedTest { +public class TestAssurance extends BusinessTest { private final Timestamp yesterday = new Timestamp(System.currentTimeMillis() - 24L * 60 * 60 * 1000L); @@ -31,7 +32,7 @@ public class TestAssurance extends ManagedTest { private final int applicantID; - public TestAssurance() { + public TestAssurance() throws GigiApiException { agentID = createAssuranceUser("a", "b", createUniqueName() + "@example.com", TEST_PASSWORD); applicantID = createVerifiedUser("a", "c", createUniqueName() + "@example.com", TEST_PASSWORD); } diff --git a/tests/org/cacert/gigi/dbObjects/TestCATS.java b/tests/org/cacert/gigi/dbObjects/TestCATS.java index 721b7a65..50f1cbe4 100644 --- a/tests/org/cacert/gigi/dbObjects/TestCATS.java +++ b/tests/org/cacert/gigi/dbObjects/TestCATS.java @@ -7,10 +7,10 @@ import java.security.GeneralSecurityException; import java.sql.Date; import org.cacert.gigi.dbObjects.CATS.CATSType; -import org.cacert.gigi.testUtils.ClientTest; +import org.cacert.gigi.testUtils.ClientBusinessTest; import org.junit.Test; -public class TestCATS extends ClientTest { +public class TestCATS extends ClientBusinessTest { /** * at least 11 months ago (but less than 12), so is inside the window of @@ -28,17 +28,17 @@ public class TestCATS extends ClientTest { @Test public void testRAChallenge() throws IOException, GeneralSecurityException { - CATS.enterResult(User.getById(id), CATSType.ASSURER_CHALLENGE, min12month, "en_US", "1"); + CATS.enterResult(u, CATSType.ASSURER_CHALLENGE, min12month, "en_US", "1"); assertFalse(CATS.isInCatsLimit(id, CATSType.ASSURER_CHALLENGE.getId())); - CATS.enterResult(User.getById(id), CATSType.ASSURER_CHALLENGE, min11month, "en_US", "1"); + CATS.enterResult(u, CATSType.ASSURER_CHALLENGE, min11month, "en_US", "1"); assertTrue(CATS.isInCatsLimit(id, CATSType.ASSURER_CHALLENGE.getId())); } @Test public void testCodeSigningChallenge() throws IOException, GeneralSecurityException { - CATS.enterResult(User.getById(id), CATSType.CODE_SIGNING_CHALLENGE_NAME, min12month, "en_US", "1"); + CATS.enterResult(u, CATSType.CODE_SIGNING_CHALLENGE_NAME, min12month, "en_US", "1"); assertFalse(CATS.isInCatsLimit(id, CATSType.CODE_SIGNING_CHALLENGE_NAME.getId())); - CATS.enterResult(User.getById(id), CATSType.CODE_SIGNING_CHALLENGE_NAME, min11month, "en_US", "1"); + CATS.enterResult(u, CATSType.CODE_SIGNING_CHALLENGE_NAME, min11month, "en_US", "1"); assertTrue(CATS.isInCatsLimit(id, CATSType.CODE_SIGNING_CHALLENGE_NAME.getId())); } } diff --git a/tests/org/cacert/gigi/email/TestSendmail.java b/tests/org/cacert/gigi/email/TestSendmail.java index 3535abb0..f918e3fe 100644 --- a/tests/org/cacert/gigi/email/TestSendmail.java +++ b/tests/org/cacert/gigi/email/TestSendmail.java @@ -26,6 +26,7 @@ import java.util.Random; import javax.net.ssl.SSLSocketFactory; import org.cacert.gigi.testUtils.ConfiguredTest; +import org.cacert.gigi.util.ServerConstants; import org.junit.Test; import sun.security.x509.AlgorithmId; @@ -84,7 +85,7 @@ public class TestSendmail extends ConfiguredTest { imapUntil(br, "exp"); pw.println("log logout"); imapUntil(br, "log"); - assertThat(body, containsString("From: support@cacert.local")); + assertThat(body, containsString("From: support@" + ServerConstants.getWwwHostName().replaceAll("^www.", ""))); assertThat(body, containsString("To: gigi-testuser@dogcraft.de")); assertThat(body, containsString("Subject: " + subj)); assertThat(body, containsString(Base64.getEncoder().encodeToString(msg.getBytes("UTF-8")))); diff --git a/tests/org/cacert/gigi/testUtils/BusinessTest.java b/tests/org/cacert/gigi/testUtils/BusinessTest.java new file mode 100644 index 00000000..dc62b309 --- /dev/null +++ b/tests/org/cacert/gigi/testUtils/BusinessTest.java @@ -0,0 +1,150 @@ +package org.cacert.gigi.testUtils; + +import static org.junit.Assert.*; + +import java.io.IOException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.sql.SQLException; +import java.util.Calendar; +import java.util.Locale; +import java.util.Properties; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.cacert.gigi.GigiApiException; +import org.cacert.gigi.dbObjects.Domain; +import org.cacert.gigi.dbObjects.EmailAddress; +import org.cacert.gigi.dbObjects.Name; +import org.cacert.gigi.dbObjects.User; +import org.cacert.gigi.email.EmailProvider; +import org.cacert.gigi.ping.PingerDaemon; +import org.cacert.gigi.testUtils.TestEmailReceiver.TestMail; +import org.cacert.gigi.util.DayDate; +import org.junit.BeforeClass; + +public abstract class BusinessTest extends ConfiguredTest { + + public static class InVMEmail extends EmailProvider implements MailReceiver { + + private static InVMEmail instance; + + LinkedBlockingQueue mails = new LinkedBlockingQueue<>(); + + public InVMEmail(Properties p) { + instance = this; + } + + @Override + public void sendmail(String to, String subject, String message, String from, String replyto, String toname, String fromname, String errorsto, boolean extra) throws IOException { + TestMail tm = new TestEmailReceiver.TestMail(to, subject, message, fromname, replyto) { + + @Override + public void verify() throws IOException { + Pattern p = Pattern.compile("type=(email|domain)&id=([0-9]+)&hash=([a-zA-Z0-9]*)"); + Matcher m = p.matcher(extractLink()); + assertTrue(m.find()); + String type = m.group(1); + try { + if (type.equals("domain")) { + Domain.getById(Integer.parseInt(m.group(2))).verify(m.group(3)); + } else { + EmailAddress.getById(Integer.parseInt(m.group(2))).verify(m.group(3)); + } + } catch (GigiApiException e) { + throw new Error(e); + } + } + }; + mails.add(tm); + } + + public static InVMEmail getInstance() { + return instance; + } + + @Override + public void clearMails() { + mails.clear(); + } + + @Override + public TestMail receive() { + try { + return mails.poll(30, TimeUnit.SECONDS); + } catch (InterruptedException e) { + throw new Error(e); + } + } + + @Override + public void setApproveRegex(Pattern compiled) { + throw new Error("Currently unimplemented"); + } + + @Override + public void setEmailCheckError(String string) { + throw new Error("Currently unimplemented"); + } + + @Override + public TestMail poll() { + throw new Error("Currently unimplemented"); + } + + } + + @BeforeClass + public static void purgeDBBeforeTest() throws SQLException, IOException { + purgeOnlyDB(); + } + + @BeforeClass + public static void initMail() { + Properties p = new Properties(); + p.setProperty("emailProvider", InVMEmail.class.getName()); + EmailProvider.initSystem(p, null, null); + try { + new PingerDaemon(KeyStore.getInstance("JKS")).start(); + } catch (KeyStoreException e) { + throw new Error(e); + } + } + + public static User createVerifiedUser() throws GigiApiException, IOException { + Calendar c = Calendar.getInstance(); + c.set(1950, 1, 1, 0, 0, 0); + c.set(Calendar.MILLISECOND, 0); + + User u = new User(createUniqueName() + "@email.com", TEST_PASSWORD, new Name("a", "m", "c", ""), new DayDate(c.getTimeInMillis()), Locale.ENGLISH); + InVMEmail.getInstance().mails.poll().verify(); + return u; + } + + public static int createVerifiedUser(String f, String l, String mail, String pw) throws GigiApiException { + Calendar c = Calendar.getInstance(); + c.set(1950, 1, 1, 0, 0, 0); + c.set(Calendar.MILLISECOND, 0); + + User u = new User(mail, pw, new Name(f, l, "", ""), new DayDate(c.getTimeInMillis()), Locale.ENGLISH); + try { + InVMEmail.getInstance().mails.poll().verify(); + } catch (IOException e) { + throw new Error(e); + } + return u.getId(); + } + + public static int createAssuranceUser(String f, String l, String mail, String pw) throws GigiApiException { + int u = createVerifiedUser(f, l, mail, pw); + makeAssurer(u); + return u; + } + + @Override + public MailReceiver getMailReciever() { + return InVMEmail.getInstance(); + } +} diff --git a/tests/org/cacert/gigi/testUtils/ClientBusinessTest.java b/tests/org/cacert/gigi/testUtils/ClientBusinessTest.java new file mode 100644 index 00000000..e096be4c --- /dev/null +++ b/tests/org/cacert/gigi/testUtils/ClientBusinessTest.java @@ -0,0 +1,20 @@ +package org.cacert.gigi.testUtils; + +import org.cacert.gigi.GigiApiException; +import org.cacert.gigi.dbObjects.User; + +public class ClientBusinessTest extends BusinessTest { + + protected final User u; + + protected final int id; + + public ClientBusinessTest() { + try { + id = createVerifiedUser("a", "b", createUniqueName() + "@example.com", TEST_PASSWORD); + u = User.getById(id); + } catch (GigiApiException e) { + throw new Error(e); + } + } +} diff --git a/tests/org/cacert/gigi/testUtils/ConfiguredTest.java b/tests/org/cacert/gigi/testUtils/ConfiguredTest.java index 9010a597..808ddd67 100644 --- a/tests/org/cacert/gigi/testUtils/ConfiguredTest.java +++ b/tests/org/cacert/gigi/testUtils/ConfiguredTest.java @@ -1,5 +1,7 @@ package org.cacert.gigi.testUtils; +import static org.junit.Assert.*; + import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -10,15 +12,25 @@ import java.security.GeneralSecurityException; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.Signature; +import java.sql.SQLException; import java.util.Properties; import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.DatabaseConnection; import org.cacert.gigi.database.DatabaseConnection.Link; +import org.cacert.gigi.database.GigiPreparedStatement; +import org.cacert.gigi.database.SQLFileManager.ImportType; +import org.cacert.gigi.dbObjects.CATS.CATSType; +import org.cacert.gigi.dbObjects.Domain; +import org.cacert.gigi.dbObjects.DomainPingType; +import org.cacert.gigi.testUtils.TestEmailReceiver.TestMail; +import org.cacert.gigi.util.DatabaseManager; import org.cacert.gigi.util.DomainAssessment; import org.cacert.gigi.util.PEM; +import org.cacert.gigi.util.ServerConstants; import org.junit.BeforeClass; import sun.security.pkcs10.PKCS10; @@ -39,6 +51,13 @@ public abstract class ConfiguredTest { private static boolean envInited = false; + /** + * Some password that fulfills the password criteria. + */ + public static final String TEST_PASSWORD = "xvXV12°§"; + + public static final String DIFFICULT_CHARS = "ÜÖÄß𐀀"; + @BeforeClass public static void initEnvironmentHook() throws IOException { initEnvironment(); @@ -46,15 +65,17 @@ public abstract class ConfiguredTest { public static Properties initEnvironment() throws IOException { TimeZone.setDefault(TimeZone.getTimeZone("UTC")); - Properties props = generateProps(); if (envInited) { - return props; + return generateProps(); } envInited = true; - DomainAssessment.init(props); try (FileInputStream inStream = new FileInputStream("config/test.properties")) { testProps.load(inStream); } + Properties props = generateProps(); + ServerConstants.init(props); + DomainAssessment.init(props); + if ( !DatabaseConnection.isInited()) { DatabaseConnection.init(testProps); try { @@ -69,6 +90,14 @@ public abstract class ConfiguredTest { private static Properties generateProps() throws Error { Properties mainProps = new Properties(); + mainProps.setProperty("name.secure", testProps.getProperty("name.secure")); + mainProps.setProperty("name.www", testProps.getProperty("name.www")); + mainProps.setProperty("name.static", testProps.getProperty("name.static")); + mainProps.setProperty("name.api", testProps.getProperty("name.api")); + + mainProps.setProperty("https.port", testProps.getProperty("serverPort.https")); + mainProps.setProperty("http.port", testProps.getProperty("serverPort.http")); + File out = new File("financial.dat"); if ( !out.exists()) { try (FileOutputStream fos = new FileOutputStream(out)) { @@ -139,4 +168,48 @@ public abstract class ConfiguredTest { } return i; } + + public static void makeAssurer(int uid) { + try (GigiPreparedStatement ps1 = new GigiPreparedStatement("INSERT INTO cats_passed SET user_id=?, variant_id=?, language='en_EN', version=1")) { + ps1.setInt(1, uid); + ps1.setInt(2, CATSType.ASSURER_CHALLENGE.getId()); + ps1.execute(); + } + + try (GigiPreparedStatement ps2 = new GigiPreparedStatement("INSERT INTO `notary` SET `from`=?, `to`=?, points='100'")) { + ps2.setInt(1, uid); + ps2.setInt(2, uid); + ps2.execute(); + } + } + + public MailReceiver getMailReciever() { + throw new Error("Feature requires Business or ManagedTest."); + } + + public void verify(Domain d) { + try { + d.addPing(DomainPingType.EMAIL, "admin"); + TestMail testMail = getMailReciever().receive(); + testMail.verify(); + assertTrue(d.isVerified()); + } catch (GigiApiException e) { + throw new Error(e); + } catch (IOException e) { + throw new Error(e); + } + } + + public static void purgeOnlyDB() throws SQLException, IOException { + System.out.print("... resetting Database"); + long ms = System.currentTimeMillis(); + try { + DatabaseManager.run(new String[] { + testProps.getProperty("sql.driver"), testProps.getProperty("sql.url"), testProps.getProperty("sql.user"), testProps.getProperty("sql.password") + }, ImportType.TRUNCATE); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + System.out.println(" in " + (System.currentTimeMillis() - ms) + " ms"); + } } diff --git a/tests/org/cacert/gigi/testUtils/MailReceiver.java b/tests/org/cacert/gigi/testUtils/MailReceiver.java new file mode 100644 index 00000000..99a88864 --- /dev/null +++ b/tests/org/cacert/gigi/testUtils/MailReceiver.java @@ -0,0 +1,19 @@ +package org.cacert.gigi.testUtils; + +import java.util.regex.Pattern; + +import org.cacert.gigi.testUtils.TestEmailReceiver.TestMail; + +public interface MailReceiver { + + void clearMails(); + + TestMail receive(); + + void setApproveRegex(Pattern compiled); + + void setEmailCheckError(String string); + + TestMail poll(); + +} diff --git a/tests/org/cacert/gigi/testUtils/ManagedTest.java b/tests/org/cacert/gigi/testUtils/ManagedTest.java index f3c0044b..1ea49cf4 100644 --- a/tests/org/cacert/gigi/testUtils/ManagedTest.java +++ b/tests/org/cacert/gigi/testUtils/ManagedTest.java @@ -37,10 +37,6 @@ import org.cacert.gigi.DevelLauncher; import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.GigiPreparedStatement; import org.cacert.gigi.database.GigiResultSet; -import org.cacert.gigi.database.SQLFileManager.ImportType; -import org.cacert.gigi.dbObjects.CATS.CATSType; -import org.cacert.gigi.dbObjects.Domain; -import org.cacert.gigi.dbObjects.DomainPingType; import org.cacert.gigi.dbObjects.EmailAddress; import org.cacert.gigi.dbObjects.Group; import org.cacert.gigi.dbObjects.Job; @@ -50,8 +46,6 @@ import org.cacert.gigi.pages.Manager; import org.cacert.gigi.pages.account.MyDetails; import org.cacert.gigi.pages.main.RegisterPage; import org.cacert.gigi.testUtils.TestEmailReceiver.TestMail; -import org.cacert.gigi.util.DatabaseManager; -import org.cacert.gigi.util.ServerConstants; import org.cacert.gigi.util.SimpleSigner; import org.hamcrest.CoreMatchers; import org.junit.After; @@ -68,13 +62,6 @@ public class ManagedTest extends ConfiguredTest { System.setProperty("sun.net.http.allowRestrictedHeaders", "true"); } - /** - * Some password that fulfills the password criteria. - */ - public static final String TEST_PASSWORD = "xvXV12°§"; - - public static final String DIFFICULT_CHARS = "ÜÖÄß𐀀"; - private static TestEmailReceiver ter; private static Process gigi; @@ -113,7 +100,6 @@ public class ManagedTest extends ConfiguredTest { purgeDatabase(); String type = testProps.getProperty("type"); generateMainProps(mainProps); - ServerConstants.init(mainProps); if (type.equals("local")) { url = testProps.getProperty("name.www") + ":" + testProps.getProperty("serverPort.https"); String[] parts = testProps.getProperty("mail").split(":", 2); @@ -177,16 +163,7 @@ public class ManagedTest extends ConfiguredTest { } public static void purgeDatabase() throws SQLException, IOException { - System.out.print("... resetting Database"); - long ms = System.currentTimeMillis(); - try { - DatabaseManager.run(new String[] { - testProps.getProperty("sql.driver"), testProps.getProperty("sql.url"), testProps.getProperty("sql.user"), testProps.getProperty("sql.password") - }, ImportType.TRUNCATE); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - System.out.println(" in " + (System.currentTimeMillis() - ms) + " ms"); + purgeOnlyDB(); clearCaches(); } @@ -200,13 +177,7 @@ public class ManagedTest extends ConfiguredTest { private static void generateMainProps(Properties mainProps) { mainProps.setProperty("testrunner", "true"); mainProps.setProperty("host", "127.0.0.1"); - mainProps.setProperty("name.secure", testProps.getProperty("name.secure")); - mainProps.setProperty("name.www", testProps.getProperty("name.www")); - mainProps.setProperty("name.static", testProps.getProperty("name.static")); - mainProps.setProperty("name.api", testProps.getProperty("name.api")); - mainProps.setProperty("https.port", testProps.getProperty("serverPort.https")); - mainProps.setProperty("http.port", testProps.getProperty("serverPort.http")); mainProps.setProperty("emailProvider", "org.cacert.gigi.email.TestEmailProvider"); mainProps.setProperty("emailProvider.port", "8473"); mainProps.setProperty("sql.driver", testProps.getProperty("sql.driver")); @@ -243,7 +214,8 @@ public class ManagedTest extends ConfiguredTest { ManagedTest.setAcceptLanguage(null); } - public static TestEmailReceiver getMailReciever() { + @Override + public MailReceiver getMailReciever() { return ter; } @@ -346,20 +318,6 @@ public class ManagedTest extends ConfiguredTest { return uid; } - public static void makeAssurer(int uid) { - try (GigiPreparedStatement ps1 = new GigiPreparedStatement("INSERT INTO cats_passed SET user_id=?, variant_id=?, language='en_EN', version=1")) { - ps1.setInt(1, uid); - ps1.setInt(2, CATSType.ASSURER_CHALLENGE.getId()); - ps1.execute(); - } - - try (GigiPreparedStatement ps2 = new GigiPreparedStatement("INSERT INTO `notary` SET `from`=?, `to`=?, points='100'")) { - ps2.setInt(1, uid); - ps2.setInt(2, uid); - ps2.execute(); - } - } - protected static String stripCookie(String headerField) { return headerField.substring(0, headerField.indexOf(';')); } @@ -509,7 +467,7 @@ public class ManagedTest extends ConfiguredTest { return (HttpURLConnection) uc; } - public static EmailAddress createVerifiedEmail(User u) throws InterruptedException, GigiApiException { + public EmailAddress createVerifiedEmail(User u) throws InterruptedException, GigiApiException { EmailAddress adrr = new EmailAddress(u, createUniqueName() + "test@test.tld", Locale.ENGLISH); TestMail testMail = getMailReciever().receive(); assertEquals(adrr.getAddress(), testMail.getTo()); @@ -524,18 +482,4 @@ public class ManagedTest extends ConfiguredTest { return openConnection; } - public static void verify(Domain d) { - try { - System.out.println(d.getId()); - d.addPing(DomainPingType.EMAIL, "admin"); - TestMail testMail = ter.receive(); - testMail.verify(); - assertTrue(d.isVerified()); - } catch (GigiApiException e) { - throw new Error(e); - } catch (IOException e) { - throw new Error(e); - } - } - } diff --git a/tests/org/cacert/gigi/testUtils/TestEmailReceiver.java b/tests/org/cacert/gigi/testUtils/TestEmailReceiver.java index 77c3e2d6..007fec32 100644 --- a/tests/org/cacert/gigi/testUtils/TestEmailReceiver.java +++ b/tests/org/cacert/gigi/testUtils/TestEmailReceiver.java @@ -21,7 +21,7 @@ import org.cacert.gigi.email.TestEmailProvider; * intercept the emails. This class resides in the VM that executes the * testcases and supplies the intercepted emails to the current test case. */ -public final class TestEmailReceiver extends EmailProvider implements Runnable { +public final class TestEmailReceiver extends EmailProvider implements Runnable, MailReceiver { /** * An email that has been intercepted. @@ -136,6 +136,7 @@ public final class TestEmailReceiver extends EmailProvider implements Runnable { * @return The intercepted {@link TestMail} * @see #poll() */ + @Override public TestMail receive() { TestMail poll; @@ -232,6 +233,7 @@ public final class TestEmailReceiver extends EmailProvider implements Runnable { /** * Removes all queued mails. */ + @Override public void clearMails() { mails.clear(); } diff --git a/tests/org/cacert/gigi/util/TestNotary.java b/tests/org/cacert/gigi/util/TestNotary.java index 22f75b23..477345f3 100644 --- a/tests/org/cacert/gigi/util/TestNotary.java +++ b/tests/org/cacert/gigi/util/TestNotary.java @@ -2,29 +2,24 @@ package org.cacert.gigi.util; import static org.junit.Assert.*; -import java.io.IOException; import java.sql.SQLException; import java.util.Date; import org.cacert.gigi.GigiApiException; import org.cacert.gigi.database.GigiPreparedStatement; import org.cacert.gigi.dbObjects.Assurance.AssuranceType; +import org.cacert.gigi.dbObjects.ObjectCache; import org.cacert.gigi.dbObjects.User; import org.cacert.gigi.output.DateSelector; -import org.cacert.gigi.testUtils.ManagedTest; +import org.cacert.gigi.testUtils.BusinessTest; import org.junit.Test; -public class TestNotary extends ManagedTest { +public class TestNotary extends BusinessTest { // These tests create a lot of users and therefore require resetting of the // registering-rate-limit. @Test public void testNormalAssurance() throws SQLException, GigiApiException { - try { - clearCaches(); - } catch (IOException e) { - throw new Error(e); - } User[] users = new User[30]; for (int i = 0; i < users.length; i++) { int id = createVerifiedUser("fn" + i, "ln" + i, createUniqueName() + "@email.org", TEST_PASSWORD); @@ -66,11 +61,6 @@ public class TestNotary extends ManagedTest { @Test public void testPoJam() throws SQLException, GigiApiException { - try { - clearCaches(); - } catch (IOException e) { - throw new Error(e); - } User[] users = new User[30]; for (int i = 0; i < users.length; i++) { int id = createVerifiedUser("fn" + i, "ln" + i, createUniqueName() + "@email.org", TEST_PASSWORD); @@ -81,6 +71,7 @@ public class TestNotary extends ManagedTest { ps.setInt(1, id); ps.execute(); } + ObjectCache.clearAllCaches(); // reload values from db User assurer = User.getById(id); for (int i = 0; i < users.length; i++) { assuranceFail(assurer, users[i], -1, "test-notary", "2014-01-01"); -- 2.39.2