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