]> WPIA git - gigi.git/blob - tests/org/cacert/gigi/testUtils/ConfiguredTest.java
UPD: Set default time Zone for (configed) test cases to UTC.
[gigi.git] / tests / org / cacert / gigi / testUtils / ConfiguredTest.java
1 package org.cacert.gigi.testUtils;
2
3 import java.io.File;
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
16 import org.cacert.gigi.database.DatabaseConnection;
17 import org.cacert.gigi.util.PEM;
18 import org.junit.BeforeClass;
19
20 import sun.security.pkcs10.PKCS10;
21 import sun.security.pkcs10.PKCS10Attributes;
22 import sun.security.x509.X500Name;
23
24 /**
25  * Base class for a Testsuite that makes use of the config variables that define
26  * the environment.
27  */
28 public abstract class ConfiguredTest {
29
30     static Properties testProps = new Properties();
31
32     public static Properties getTestProps() {
33         return testProps;
34     }
35
36     private static boolean envInited = false;
37
38     @BeforeClass
39     public static void initEnvironment() throws IOException {
40         TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
41         if (envInited) {
42             return;
43         }
44         envInited = true;
45         testProps.load(new FileInputStream("config/test.properties"));
46         if ( !DatabaseConnection.isInited()) {
47             DatabaseConnection.init(testProps);
48         }
49     }
50
51     public static KeyPair generateKeypair() throws GeneralSecurityException {
52         KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
53         kpg.initialize(4096);
54         KeyPair keyPair = null;
55         File f = new File("testKeypair");
56         if (f.exists()) {
57             try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f))) {
58                 keyPair = (KeyPair) ois.readObject();
59             } catch (ClassNotFoundException e) {
60                 e.printStackTrace();
61             } catch (IOException e) {
62                 e.printStackTrace();
63             }
64         } else {
65             keyPair = kpg.generateKeyPair();
66             try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f))) {
67                 oos.writeObject(keyPair);
68                 oos.close();
69             } catch (IOException e) {
70                 e.printStackTrace();
71             }
72         }
73         return keyPair;
74     }
75
76     public static String generatePEMCSR(KeyPair kp, String dn) throws GeneralSecurityException, IOException {
77         return generatePEMCSR(kp, dn, new PKCS10Attributes());
78     }
79
80     public static String generatePEMCSR(KeyPair kp, String dn, PKCS10Attributes atts) throws GeneralSecurityException, IOException {
81         return generatePEMCSR(kp, dn, atts, "SHA256WithRSA");
82     }
83
84     public static String generatePEMCSR(KeyPair kp, String dn, PKCS10Attributes atts, String signature) throws GeneralSecurityException, IOException {
85         PKCS10 p10 = new PKCS10(kp.getPublic(), atts);
86         Signature s = Signature.getInstance(signature);
87         s.initSign(kp.getPrivate());
88         p10.encodeAndSign(new X500Name(dn), s);
89         return PEM.encode("CERTIFICATE REQUEST", p10.getEncoded());
90     }
91
92     static int count = 0;
93
94     public static String createUniqueName() {
95         return "test" + System.currentTimeMillis() + "a" + (count++) + "u";
96     }
97
98 }