]> WPIA git - gigi.git/blob - tests/org/cacert/gigi/util/TestNotary.java
add: country information where verification took place
[gigi.git] / tests / org / cacert / gigi / util / TestNotary.java
1 package org.cacert.gigi.util;
2
3 import static org.junit.Assert.*;
4
5 import java.sql.SQLException;
6 import java.util.Date;
7
8 import org.cacert.gigi.GigiApiException;
9 import org.cacert.gigi.database.GigiPreparedStatement;
10 import org.cacert.gigi.dbObjects.Assurance.AssuranceType;
11 import org.cacert.gigi.dbObjects.CountryCode;
12 import org.cacert.gigi.dbObjects.CountryCode.CountryCodeType;
13 import org.cacert.gigi.dbObjects.ObjectCache;
14 import org.cacert.gigi.dbObjects.User;
15 import org.cacert.gigi.output.DateSelector;
16 import org.cacert.gigi.testUtils.BusinessTest;
17 import org.junit.Test;
18
19 public class TestNotary extends BusinessTest {
20
21     public final CountryCode DE = CountryCode.getCountryCode("DE", CountryCodeType.CODE_2_CHARS);
22
23     public TestNotary() throws GigiApiException {}
24
25     @Test
26     public void testNormalAssurance() throws SQLException, GigiApiException {
27         User[] users = new User[30];
28         for (int i = 0; i < users.length; i++) {
29             int id = createVerifiedUser("fn" + i, "ln" + i, createUniqueName() + "@email.org", TEST_PASSWORD);
30             users[i] = User.getById(id);
31         }
32         User assurer = User.getById(createAssuranceUser("fn", "ln", createUniqueName() + "@email.org", TEST_PASSWORD));
33         int[] result = new int[] {
34                 10, 10, 10, 10, 15, 15, 15, 15, 15, 20, 20, 20, 20, 20, 25, 25, 25, 25, 25, 30, 30, 30, 30, 30, 35, 35, 35, 35, 35, 35
35         };
36
37         try {
38             Notary.assure(assurer, users[0], users[0].getPreferredName(), users[0].getDoB(), -1, "test-notary", validVerificationDateString(), AssuranceType.FACE_TO_FACE, DE);
39             fail("This shouldn't have passed");
40         } catch (GigiApiException e) {
41             // expected
42         }
43         for (int i = 0; i < result.length; i++) {
44             assertEquals(result[i], assurer.getMaxAssurePoints());
45
46             assuranceFail(assurer, users[i], result[i] + 1, "test-notary", validVerificationDateString());
47             Notary.assure(assurer, users[i], users[i].getPreferredName(), users[i].getDoB(), result[i], "test-notary", validVerificationDateString(), AssuranceType.FACE_TO_FACE, DE);
48             assuranceFail(assurer, users[i], result[i], "test-notary", validVerificationDateString());
49         }
50
51         assertEquals(35, assurer.getMaxAssurePoints());
52
53         assertEquals(User.EXPERIENCE_POINTS + (30 * User.EXPERIENCE_POINTS), assurer.getExperiencePoints());
54
55     }
56
57     private void assuranceFail(User assurer, User user, int i, String location, String date) throws SQLException {
58         try {
59             Notary.assure(assurer, user, user.getPreferredName(), user.getDoB(), i, location, date, AssuranceType.FACE_TO_FACE, DE);
60             fail("This shouldn't have passed");
61         } catch (GigiApiException e) {
62             // expected
63         }
64     }
65
66     @Test
67     public void testPoJam() throws SQLException, GigiApiException {
68         User[] users = new User[30];
69         for (int i = 0; i < users.length; i++) {
70             int id = createVerifiedUser("fn" + i, "ln" + i, createUniqueName() + "@email.org", TEST_PASSWORD);
71             users[i] = User.getById(id);
72         }
73         int id = createAssuranceUser("fn", "ln", createUniqueName() + "@email.org", TEST_PASSWORD);
74         try (GigiPreparedStatement ps = new GigiPreparedStatement("UPDATE `users` SET dob=NOW() - interval '15 years' WHERE id=?")) {
75             ps.setInt(1, id);
76             ps.execute();
77         }
78         ObjectCache.clearAllCaches(); // reload values from db
79         User assurer = User.getById(id);
80         for (int i = 0; i < users.length; i++) {
81             assuranceFail(assurer, users[i], -1, "test-notary", validVerificationDateString());
82             assuranceFail(assurer, users[i], 11, "test-notary", validVerificationDateString());
83             if (User.POJAM_ENABLED) {
84                 Notary.assure(assurer, users[i], users[i].getPreferredName(), users[i].getDoB(), 10, "test-notary", validVerificationDateString(), AssuranceType.FACE_TO_FACE, DE);
85             }
86             assuranceFail(assurer, users[i], 10, "test-notary", validVerificationDateString());
87         }
88     }
89
90     @Test
91     public void testFail() throws SQLException, GigiApiException {
92         User assuranceUser = User.getById(createAssuranceUser("fn", "ln", createUniqueName() + "@example.org", TEST_PASSWORD));
93         User assuree = User.getById(createVerifiedUser("fn", "ln", createUniqueName() + "@example.org", TEST_PASSWORD));
94
95         // invalid date format
96         assuranceFail(assuranceUser, assuree, 10, "notary-junit-test", "2014-01-blah");
97         // empty date
98         assuranceFail(assuranceUser, assuree, 10, "notary-junit-test", "");
99         // null date
100         assuranceFail(assuranceUser, assuree, 10, "notary-junit-test", null);
101         // null location
102         assuranceFail(assuranceUser, assuree, 10, null, validVerificationDateString());
103         // empty location
104         assuranceFail(assuranceUser, assuree, 10, "", validVerificationDateString());
105         // date in the future
106         assuranceFail(assuranceUser, assuree, 10, "notary-junit-test", DateSelector.getDateFormat().format(new Date(System.currentTimeMillis() + 2 * 24 * 60 * 60 * 1000)));
107         // location too short
108         assuranceFail(assuranceUser, assuree, 10, "n", validVerificationDateString());
109         // points too low
110         assuranceFail(assuranceUser, assuree, -1, "notary-junit-test", validVerificationDateString());
111         // points too high
112         assuranceFail(assuranceUser, assuree, 11, "notary-junit-test", validVerificationDateString());
113
114         // verify oneself
115         assuranceFail(assuranceUser, assuranceUser, 10, "notary-junit-test", validVerificationDateString());
116         // not an assurer
117         assuranceFail(assuree, assuranceUser, 10, "notary-junit-test", validVerificationDateString());
118
119         // valid
120         Notary.assure(assuranceUser, assuree, assuree.getPreferredName(), assuree.getDoB(), 10, "notary-junit-test", validVerificationDateString(), AssuranceType.FACE_TO_FACE, DE);
121
122         // verify double
123         assuranceFail(assuranceUser, assuree, 10, "notary-junit-test", validVerificationDateString());
124
125     }
126 }