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.PEM;
21 import org.junit.BeforeClass;
23 import sun.security.pkcs10.PKCS10;
24 import sun.security.pkcs10.PKCS10Attributes;
25 import sun.security.x509.X500Name;
28 * Base class for a Testsuite that makes use of the config variables that define
31 public abstract class ConfiguredTest {
33 static Properties testProps = new Properties();
35 public static Properties getTestProps() {
39 private static boolean envInited = false;
42 public static void initEnvironment() throws IOException {
43 TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
48 try (FileInputStream inStream = new FileInputStream("config/test.properties")) {
49 testProps.load(inStream);
51 if ( !DatabaseConnection.isInited()) {
52 DatabaseConnection.init(testProps);
54 l = DatabaseConnection.newLink(false);
55 } catch (InterruptedException e) {
61 public static KeyPair generateKeypair() throws GeneralSecurityException {
62 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
64 KeyPair keyPair = null;
65 File f = new File("testKeypair");
67 try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f))) {
68 keyPair = (KeyPair) ois.readObject();
69 } catch (ClassNotFoundException e) {
71 } catch (IOException e) {
75 keyPair = kpg.generateKeyPair();
76 try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f))) {
77 oos.writeObject(keyPair);
79 } catch (IOException e) {
86 public static String generatePEMCSR(KeyPair kp, String dn) throws GeneralSecurityException, IOException {
87 return generatePEMCSR(kp, dn, new PKCS10Attributes());
90 public static String generatePEMCSR(KeyPair kp, String dn, PKCS10Attributes atts) throws GeneralSecurityException, IOException {
91 return generatePEMCSR(kp, dn, atts, "SHA256WithRSA");
94 public static String generatePEMCSR(KeyPair kp, String dn, PKCS10Attributes atts, String signature) throws GeneralSecurityException, IOException {
95 PKCS10 p10 = new PKCS10(kp.getPublic(), atts);
96 Signature s = Signature.getInstance(signature);
97 s.initSign(kp.getPrivate());
98 p10.encodeAndSign(new X500Name(dn), s);
99 return PEM.encode("CERTIFICATE REQUEST", p10.getEncoded());
102 static int count = 0;
104 private static Link l;
106 public static String createUniqueName() {
107 return "test" + System.currentTimeMillis() + "a" + (count++) + "u";
110 public static int countRegex(String text, String pattern) {
111 Pattern p = Pattern.compile(pattern);
112 Matcher m = p.matcher(text);