2 * Copyright 2005 the original author or authors.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.wamblee.usermgt;
19 import java.sql.SQLException;
22 import org.wamblee.persistence.hibernate.HibernateMappingFiles;
23 import org.wamblee.security.encryption.Md5HexMessageDigester;
24 import org.wamblee.test.spring.SpringTestCase;
25 import org.wamblee.test.spring.SpringConfigFiles;
26 import org.wamblee.usermgt.UserMgtException.Reason;
29 * Tests the inmemory user set. Intended to be subclassed for other
30 * implementations of user set.
32 public class InMemoryUserSetTest extends SpringTestCase {
34 protected static final String PASSWORD = "abc123";
36 private UserSet _users;
37 private GroupSet _groups;
41 public InMemoryUserSetTest() {
42 super(SpringConfigFiles.class, HibernateMappingFiles.class);
45 protected InMemoryUserSetTest(Class<? extends SpringConfigFiles> aSprings,
46 Class<? extends HibernateMappingFiles> aMappings) {
47 super(aSprings, aMappings);
51 * This method must be overriden in subclasses.
52 * @return New user set object.
54 protected UserSet createUserSet() {
55 return new InMemoryUserSet( new RegexpNameValidator(RegexpNameValidator.PASSWORD_PATTERN, Reason.INVALID_PASSWORD, "Password must contain at least 6 characters"),
56 new Md5HexMessageDigester());
60 * This method must be overriden in subclasses.
61 * @return New group set object.
63 protected GroupSet createGroupSet() {
64 return new InMemoryGroupSet();
68 * @see org.wamblee.test.SpringTestCase#setUp()
71 protected void setUp() throws Exception {
73 _users = createUserSet();
74 _groups = createGroupSet();
75 _group = new Group("group0");
81 protected UserSet getUsers() {
85 protected GroupSet getGroups() {
89 protected Group createGroup(String aName) {
90 return new Group(aName);
93 protected User createUser(String aName, String aPassword, Group aGroup) throws UserMgtException {
94 return UsermgtTestUtils.createUser(aName, aPassword, aGroup);
97 protected void addUserToGroup(User aUser, Group aGroup) throws UserMgtException {
98 aUser.addGroup(aGroup);
101 protected void removeUserFromGroup(User aUser, Group aGroup ) throws UserMgtException {
102 aUser.removeGroup(aGroup);
106 * Additional check to be implemented by a subclass.
107 * @param aUser User to check for existence.
109 protected void checkUserExists(String aUser) throws SQLException {
114 * Additional check to be implemented by a subclass.
115 * @param aUser User to check for non-existence.
117 protected void checkUserNotExists(String aUser) throws SQLException {
122 * Additional check to be implemented by a subclass.
123 * @param aSize Expected number of users.
125 protected void checkUserCount(int aSize) throws SQLException {
126 assertEquals(aSize, _users.size());
130 * Additional check to be implemented by a subclass.
131 * @param aUser User to check for existence.
133 protected void checkGroupExists(String aUser) throws SQLException {
138 * Additional check to be implemented by a subclass.
139 * @param aUser User to check for non-existence.
141 protected void checkGroupNotExists(String aUser) throws SQLException {
146 * Additional check to be implemented by a subclass.
147 * @param aSize Expected number of users.
149 protected void checkGroupCount(int aSize) throws SQLException {
155 * Adds a user and verifies that the user is added using
156 * find(), list(), and contains().
159 public void testAdd() throws SQLException, UserMgtException {
160 User user = createUser("user1", PASSWORD, _group);
161 assertTrue( _users.add(user) );
162 checkUserExists(user.getName());
164 User user2 = _users.find("user1");
165 assertNotNull(user2);
166 assertEquals(user.getName(), user2.getName());
167 Set<User> set = _users.list();
168 assertEquals(1, set.size());
169 assertTrue(set.contains(user));
173 * Tries to find a non-existing user. Verifies that null is
177 public void testFindUnknownUser() throws SQLException, UserMgtException {
178 User user1 = createUser("user1", PASSWORD, _group);
179 User user2 = createUser("user2", PASSWORD, _group);
182 checkUserExists(user1.getName());
183 checkUserExists(user2.getName());
185 assertNull( _users.find("user3") );
186 checkUserNotExists("user3");
190 * Adds duplicate user. Verifies that the existing user is left untouched.
192 public void testAddDuplicateUser() throws SQLException, UserMgtException {
193 User user1 = createUser("user1", PASSWORD, _group);
196 assertEquals(1, _users.list().size());
197 assertTrue(_users.contains(user1));
198 user1 = createUser("user1", PASSWORD, _group);
199 assertFalse(_users.add(user1));
200 assertEquals(1, _users.list().size());
202 checkUserExists(user1.getName());
207 * Removes a user. Verifies that the user is
208 * removed and the return value is true.
211 public void testRemoveUser() throws SQLException, UserMgtException {
212 User user1 = createUser("user1", PASSWORD, _group);
214 assertTrue(_users.contains(user1));
217 assertTrue(_users.remove(user1));
218 assertFalse(_users.contains(user1));
219 assertNull(_users.find(user1.getName()));
220 assertEquals(0, _users.list().size());
225 * Removes a non-existing user. Verifies that no users are
226 * removed an that the return value is true.
229 public void testRemoveNonExistingUser() throws SQLException, UserMgtException {
230 User user1 = createUser("user1", PASSWORD, _group);
233 User nonExistingUser = createUser("user2", PASSWORD, _group);
234 nonExistingUser.setPrimaryKey(new Long(1000));
235 nonExistingUser.setPersistedVersion(10);
236 assertFalse(_users.remove(nonExistingUser));
237 assertTrue(_users.contains(user1));
238 assertEquals(1, _users.list().size());
243 * Adds a number of users to the set and verifies that list()
247 public void testList() throws SQLException, UserMgtException {
248 User user1 = createUser("user1", PASSWORD, _group);
249 User user2 = createUser("user2", PASSWORD, _group);
250 User user3 = createUser("user3", PASSWORD, _group);
251 assertTrue(_users.add(user1));
252 assertTrue(_users.add(user2));
253 assertTrue(_users.add(user3));
255 checkUserExists(user1.getName());
256 checkUserExists(user2.getName());
257 checkUserExists(user3.getName());
259 Set<User> set = _users.list();
260 assertTrue(set.contains(user1));
261 assertTrue(set.contains(user2));
262 assertTrue(set.contains(user3));
268 * Adds several users to different groups and verifies that
269 * the correct users are returned when looking for users in
271 * @throws SQLException
273 public void testListByGroup() throws SQLException, UserMgtException {
274 Group group1 = new Group("group1");
275 Group group2 = new Group("group2");
276 Group group3 = new Group("group3");
286 User user1 = createUser("user1", PASSWORD, group1);
287 user1.addGroup(group2);
288 user1.addGroup(group3);
289 User user2 = createUser("user2", PASSWORD, group2);
290 user2.addGroup(group3);
291 User user3 = createUser("user3", PASSWORD, group3);
296 checkUserExists(user1.getName());
297 checkUserExists(user2.getName());
298 checkUserExists(user3.getName());
300 checkGroupExists(group1.getName());
301 checkGroupExists(group2.getName());
302 checkGroupExists(group3.getName());
305 checkGroupCount(3+1); // also count the group that was created in the setUp().
307 Set<User> list = _users.list(group1);
308 assertTrue(list.contains(user1));
309 assertEquals(1, list.size());
311 list = _users.list(group2);
312 assertTrue(list.contains(user1));
313 assertTrue(list.contains(user2));
314 assertEquals(2, list.size());
316 list = _users.list(group3);
317 assertTrue(list.contains(user1));
318 assertTrue(list.contains(user2));
319 assertTrue(list.contains(user3));
320 assertEquals(3, list.size());