]> WPIA git - gigi.git/blobdiff - tests/org/cacert/gigi/testUtils/ConfiguredTest.java
add: Allow multiple names, name-schemes, multi-name-assurance, etc.
[gigi.git] / tests / org / cacert / gigi / testUtils / ConfiguredTest.java
index 207aa006e2cc3f85b77d30eccb0d32a7545680a4..5ab200793be1ada9b60254d7a7cd6007e85a676b 100644 (file)
@@ -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,11 +12,26 @@ 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.dbObjects.User;
+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;
@@ -35,17 +52,63 @@ 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 initEnvironment() throws IOException {
+    public static void initEnvironmentHook() throws IOException {
+        initEnvironment();
+    }
+
+    public static Properties initEnvironment() throws IOException {
         TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
         if (envInited) {
-            return;
+            return generateProps();
         }
         envInited = true;
-        testProps.load(new FileInputStream("config/test.properties"));
+        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 {
+                l = DatabaseConnection.newLink(false);
+            } catch (InterruptedException e) {
+                throw new Error(e);
+            }
+        }
+        return props;
+
+    }
+
+    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)) {
+                fos.write("google.com\ntwitter.com\n".getBytes("UTF-8"));
+            } catch (IOException e) {
+                throw new Error(e);
+            }
         }
+        mainProps.setProperty("highFinancialValue", out.getAbsolutePath());
+        return mainProps;
     }
 
     public static KeyPair generateKeypair() throws GeneralSecurityException {
@@ -91,8 +154,63 @@ public abstract class ConfiguredTest {
 
     static int count = 0;
 
+    private static Link l;
+
     public static String createUniqueName() {
         return "test" + System.currentTimeMillis() + "a" + (count++) + "u";
     }
 
+    public static int countRegex(String text, String pattern) {
+        Pattern p = Pattern.compile(pattern);
+        Matcher m = p.matcher(text);
+        int i = 0;
+        while (m.find()) {
+            i++;
+        }
+        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, User.getById(uid).getPreferredName().getId());
+            ps2.execute();
+        }
+    }
+
+    public MailReceiver getMailReceiver() {
+        throw new Error("Feature requires Business or ManagedTest.");
+    }
+
+    public void verify(Domain d) {
+        try {
+            d.addPing(DomainPingType.EMAIL, "admin");
+            TestMail testMail = getMailReceiver().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.println("... 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("Database reset complete in " + (System.currentTimeMillis() - ms) + " ms.");
+    }
 }