1 package org.cacert.gigi.testUtils;
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.io.ObjectInputStream;
8 import java.io.ObjectOutputStream;
9 import java.security.GeneralSecurityException;
10 import java.security.KeyPair;
11 import java.security.KeyPairGenerator;
12 import java.security.Signature;
13 import java.util.Properties;
14 import java.util.TimeZone;
15 import java.util.regex.Matcher;
16 import java.util.regex.Pattern;
18 import org.cacert.gigi.database.DatabaseConnection;
19 import org.cacert.gigi.database.DatabaseConnection.Link;
20 import org.cacert.gigi.util.DomainAssessment;
21 import org.cacert.gigi.util.PEM;
22 import org.junit.BeforeClass;
24 import sun.security.pkcs10.PKCS10;
25 import sun.security.pkcs10.PKCS10Attributes;
26 import sun.security.x509.X500Name;
29 * Base class for a Testsuite that makes use of the config variables that define
32 public abstract class ConfiguredTest {
34 static Properties testProps = new Properties();
36 public static Properties getTestProps() {
40 private static boolean envInited = false;
43 public static void initEnvironmentHook() throws IOException {
47 public static Properties initEnvironment() throws IOException {
48 TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
49 Properties props = generateProps();
54 DomainAssessment.init(props);
55 try (FileInputStream inStream = new FileInputStream("config/test.properties")) {
56 testProps.load(inStream);
58 if ( !DatabaseConnection.isInited()) {
59 DatabaseConnection.init(testProps);
61 l = DatabaseConnection.newLink(false);
62 } catch (InterruptedException e) {
70 private static Properties generateProps() throws Error {
71 Properties mainProps = new Properties();
72 File out = new File("financial.dat");
74 try (FileOutputStream fos = new FileOutputStream(out)) {
75 fos.write("google.com\ntwitter.com\n".getBytes("UTF-8"));
76 } catch (IOException e) {
80 mainProps.setProperty("highFinancialValue", out.getAbsolutePath());
84 public static KeyPair generateKeypair() throws GeneralSecurityException {
85 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
87 KeyPair keyPair = null;
88 File f = new File("testKeypair");
90 try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f))) {
91 keyPair = (KeyPair) ois.readObject();
92 } catch (ClassNotFoundException e) {
94 } catch (IOException e) {
98 keyPair = kpg.generateKeyPair();
99 try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f))) {
100 oos.writeObject(keyPair);
102 } catch (IOException e) {
109 public static String generatePEMCSR(KeyPair kp, String dn) throws GeneralSecurityException, IOException {
110 return generatePEMCSR(kp, dn, new PKCS10Attributes());
113 public static String generatePEMCSR(KeyPair kp, String dn, PKCS10Attributes atts) throws GeneralSecurityException, IOException {
114 return generatePEMCSR(kp, dn, atts, "SHA256WithRSA");
117 public static String generatePEMCSR(KeyPair kp, String dn, PKCS10Attributes atts, String signature) throws GeneralSecurityException, IOException {
118 PKCS10 p10 = new PKCS10(kp.getPublic(), atts);
119 Signature s = Signature.getInstance(signature);
120 s.initSign(kp.getPrivate());
121 p10.encodeAndSign(new X500Name(dn), s);
122 return PEM.encode("CERTIFICATE REQUEST", p10.getEncoded());
125 static int count = 0;
127 private static Link l;
129 public static String createUniqueName() {
130 return "test" + System.currentTimeMillis() + "a" + (count++) + "u";
133 public static int countRegex(String text, String pattern) {
134 Pattern p = Pattern.compile(pattern);
135 Matcher m = p.matcher(text);