Moved over some of the security stuff from Photos.
[utils] / security / src / test / java / org / wamblee / usermgt / hibernate / HibernateUserSetTest.java
1 /*
2  * Copyright 2005 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */ 
16
17 package org.wamblee.usermgt.hibernate;
18
19 import java.sql.ResultSet;
20 import java.sql.SQLException;
21 import java.util.Set;
22
23 import org.wamblee.cache.Cache;
24 import org.wamblee.general.BeanKernel;
25 import org.wamblee.usermgt.Group;
26 import org.wamblee.usermgt.GroupSet;
27 import org.wamblee.usermgt.InMemoryUserSetTest;
28 import org.wamblee.usermgt.User;
29 import org.wamblee.usermgt.UserMgtException;
30 import org.wamblee.usermgt.UserSet;
31 import org.wamblee.usermgt.UsermgtHibernateMappingFiles;
32 import org.wamblee.usermgt.UsermgtSpringConfigFiles;
33
34 /**
35  * Tests for {@link org.wamblee.usermgt.hibernate.HibernateGroupSet} 
36  */
37 public class HibernateUserSetTest extends InMemoryUserSetTest {
38     
39     private static final String USER_TABLE = "USERS";
40     private static final String GROUP_TABLE = "GROUPS"; 
41     
42     private static final String USER_QUERY = "select * from " + USER_TABLE + " where name = ?";
43     private static final String GROUP_QUERY = "select * from " + GROUP_TABLE + " where name = ?"; 
44
45     public HibernateUserSetTest() { 
46         super(UsermgtSpringConfigFiles.class, UsermgtHibernateMappingFiles.class);
47     }
48     
49     /* (non-Javadoc)
50      * @see org.wamblee.usermgt.InMemoryUserSetTest#setUp()
51      */
52     @Override
53     protected void setUp() throws Exception {
54         super.setUp();
55         clearUserCache();
56     }
57
58     /**
59      * Clears the user cache.  
60      */
61     private void clearUserCache() {
62         BeanKernel.getBeanFactory().find("userCache", Cache.class).clear();
63     }
64     
65     /* (non-Javadoc)
66      * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupCount(int)
67      */
68     @Override
69     protected void checkUserCount(int aSize) throws SQLException {
70         super.flush();
71         super.checkUserCount(aSize);
72         assertEquals(aSize, getTableSize(USER_TABLE));
73     }
74     
75     /* (non-Javadoc)
76      * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupExists(java.lang.String)
77      */
78     @Override
79     protected void checkUserExists(String aUser) throws SQLException {
80         flush(); 
81         ResultSet result = executeQuery(USER_QUERY, aUser);
82         assertEquals(1, countResultSet(result));
83     }
84     
85     /* (non-Javadoc)
86      * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupNotExists(java.lang.String)
87      */
88     @Override
89     protected void checkUserNotExists(String aUser) throws SQLException {
90        flush(); 
91        ResultSet result = executeQuery(USER_QUERY, aUser); 
92        assertEquals(0, countResultSet(result));
93     }
94     
95     /* (non-Javadoc)
96      * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupCount(int)
97      */
98     @Override
99     protected void checkGroupCount(int aSize) throws SQLException {
100         super.flush(); 
101         assertEquals(aSize, getTableSize(GROUP_TABLE));
102     }
103     
104     /* (non-Javadoc)
105      * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupExists(java.lang.String)
106      */
107     @Override
108     protected void checkGroupExists(String aGroup) throws SQLException {
109         flush(); 
110        
111         ResultSet result = executeQuery(GROUP_QUERY, aGroup);
112         assertEquals(1, countResultSet(result));
113     }
114     
115     /* (non-Javadoc)
116      * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupNotExists(java.lang.String)
117      */
118     @Override
119     protected void checkGroupNotExists(String aGroup) throws SQLException {
120        flush(); 
121        ResultSet result = executeQuery(GROUP_QUERY, aGroup); 
122        assertEquals(0, countResultSet(result));
123     }
124     
125     /* (non-Javadoc)
126      * @see org.wamblee.usermgt.InMemoryGroupSetTest#createGroupSet()
127      */
128     @Override
129     protected UserSet createUserSet() {
130         return BeanKernel.getBeanFactory().find(UserSet.class); 
131     }
132     
133     /* (non-Javadoc)
134      * @see org.wamblee.usermgt.InMemoryUserSetTest#createGroupSet()
135      */
136     @Override
137     protected GroupSet createGroupSet() {
138         return BeanKernel.getBeanFactory().find(GroupSet.class);
139     }
140
141     /**
142      * Reproduction of a bug. 
143      * Create a user which is in group1
144      * Add it to a second group group2.
145      * Remove the user from group1.
146      * Verify the user is in group2. 
147      */
148     public void testVerifyAddRemove() throws SQLException, UserMgtException {
149         cleanDatabase(); // just to be sure.
150         GroupSet groups = getGroups(); 
151         assertEquals(0, groups.size()); 
152         Group group1 = createGroup("group1");
153         Group group2 = createGroup("group2");
154         groups.add(group1); 
155         groups.add(group2); 
156         checkGroupExists("group1"); 
157         checkGroupExists("group2");
158         
159         User user = createUser("user", PASSWORD, group1);
160         getUsers().add(user);    
161         checkUserExists("user");
162      
163         addUserToGroup(user, group2);
164         getUsers().userModified(user);
165         clearUserCache(); 
166         User user2 = getUsers().find("user");
167         Set<Group> userGroups = user2.getGroups();
168         assertTrue(user2.isInGroup("group1")); 
169         assertTrue(user2.isInGroup("group2"));
170         assertEquals(2, userGroups.size());
171         
172         removeUserFromGroup(user, group1); 
173         getUsers().userModified(user); 
174         clearUserCache(); 
175         user2 = getUsers().find("user"); 
176         userGroups = user2.getGroups();
177         assertFalse(user2.isInGroup("group1")); 
178         assertTrue(user2.isInGroup("group2"));
179         assertEquals(1, userGroups.size());
180     }
181     
182 }