]> WPIA git - gigi.git/blob - tests/org/cacert/gigi/TestUserGroupMembership.java
3808df5d891cc6f0d696bfeac944b473dea7cc22
[gigi.git] / tests / org / cacert / gigi / TestUserGroupMembership.java
1 package org.cacert.gigi;
2
3 import static org.hamcrest.CoreMatchers.*;
4 import static org.junit.Assert.*;
5
6 import java.sql.SQLException;
7 import java.util.Arrays;
8 import java.util.Collections;
9 import java.util.HashSet;
10
11 import org.cacert.gigi.database.DatabaseConnection;
12 import org.cacert.gigi.database.GigiPreparedStatement;
13 import org.cacert.gigi.database.GigiResultSet;
14 import org.cacert.gigi.dbObjects.Group;
15 import org.cacert.gigi.dbObjects.ObjectCache;
16 import org.cacert.gigi.dbObjects.User;
17 import org.cacert.gigi.testUtils.ManagedTest;
18 import org.junit.Test;
19
20 public class TestUserGroupMembership extends ManagedTest {
21
22     private final Group ttpGroup = Group.getByString("ttp-assurer");
23
24     private final Group supporter = Group.getByString("supporter");
25
26     @Test
27     public void testAddObject() throws GigiApiException, SQLException {
28         User u = User.getById(createVerifiedUser("fname", "lname", createUniqueName() + "@example.org", TEST_PASSWORD));
29
30         User granter = User.getById(createVerifiedUser("grFname", "lname", createUniqueName() + "@example.org", TEST_PASSWORD));
31         assertBehavesEmpty(u);
32
33         u.grantGroup(granter, ttpGroup);
34         assertBehavesTtpGroup(u);
35
36         ObjectCache.clearAllCaches();
37         User u2 = User.getById(u.getId());
38
39         assertThat(u2, is(not(sameInstance(u))));
40         assertBehavesTtpGroup(u2);
41
42         GigiResultSet rs = fetchGroupRowsFor(u);
43
44         assertTrue(rs.next());
45         assertEquals(0, rs.getInt("revokedby"));
46         assertEquals(granter.getId(), rs.getInt("grantedby"));
47         assertEquals(ttpGroup.getDatabaseName(), rs.getString("permission"));
48
49         assertNull(rs.getDate("deleted"));
50         assertNotNull(rs.getDate("granted"));
51
52         assertFalse(rs.next());
53     }
54
55     @Test
56     public void testRemoveObject() throws GigiApiException, SQLException {
57         User u = User.getById(createVerifiedUser("fname", "lname", createUniqueName() + "@example.org", TEST_PASSWORD));
58
59         User granter = User.getById(createVerifiedUser("grFname", "lname", createUniqueName() + "@example.org", TEST_PASSWORD));
60
61         assertBehavesEmpty(u);
62         u.grantGroup(granter, ttpGroup);
63         assertBehavesTtpGroup(u);
64         u.revokeGroup(granter, ttpGroup);
65         assertBehavesEmpty(u);
66
67         ObjectCache.clearAllCaches();
68         User u2 = User.getById(u.getId());
69         assertThat(u2, is(not(sameInstance(u))));
70         assertBehavesEmpty(u);
71
72         GigiResultSet rs = fetchGroupRowsFor(u);
73         assertTrue(rs.next());
74         assertEquals(granter.getId(), rs.getInt("revokedby"));
75         assertEquals(granter.getId(), rs.getInt("grantedby"));
76         assertEquals(ttpGroup.getDatabaseName(), rs.getString("permission"));
77
78         assertNotNull(rs.getDate("deleted"));
79         assertNotNull(rs.getDate("granted"));
80
81         assertFalse(rs.next());
82     }
83
84     private GigiResultSet fetchGroupRowsFor(User u) throws SQLException {
85         GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT * FROM `user_groups` WHERE `user`=?");
86         ps.setInt(1, u.getId());
87         GigiResultSet rs = ps.executeQuery();
88         return rs;
89     }
90
91     private void assertBehavesEmpty(User u) {
92         assertEquals(Collections.emptySet(), u.getGroups());
93         assertFalse(u.isInGroup(ttpGroup));
94         assertFalse(u.isInGroup(supporter));
95     }
96
97     private void assertBehavesTtpGroup(User u) {
98         assertEquals(new HashSet<>(Arrays.asList(ttpGroup)), u.getGroups());
99         assertTrue(u.isInGroup(ttpGroup));
100         assertFalse(u.isInGroup(supporter));
101     }
102
103     @Test
104     public void testListGroup() {
105         Group g = Group.getByString("supporter");
106         User ux = User.getById(createVerifiedUser("fn", "ln", createUniqueName() + "@example.org", TEST_PASSWORD));
107         User ux2 = User.getById(createVerifiedUser("fn", "ln", createUniqueName() + "@example.org", TEST_PASSWORD));
108         assertEquals(0, g.getMembers(0, 10).length);
109         ux.grantGroup(ux, g);
110         assertEquals(1, g.getMembers(0, 10).length);
111         ux2.grantGroup(ux, g);
112         assertEquals(2, g.getMembers(0, 10).length);
113         ux2.revokeGroup(ux, g);
114         assertEquals(1, g.getMembers(0, 10).length);
115         ux.revokeGroup(ux, g);
116         assertEquals(0, g.getMembers(0, 10).length);
117
118     }
119
120     @Test
121     public void testGroupEquals() {
122         assertTrue(ttpGroup.equals(ttpGroup));
123         assertFalse(ttpGroup.equals(null));
124         assertFalse(ttpGroup.equals(""));
125         assertFalse(ttpGroup.equals(supporter));
126     }
127 }