2 * Copyright 2005-2010 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.
16 package org.wamblee.security.authentication;
18 import junit.framework.TestCase;
20 import org.wamblee.security.authentication.Group;
21 import org.wamblee.security.authentication.GroupSet;
22 import org.wamblee.security.authentication.InMemoryGroupSet;
23 import org.wamblee.security.authentication.InMemoryUserSet;
24 import org.wamblee.security.authentication.RegexpNameValidator;
25 import org.wamblee.security.authentication.User;
26 import org.wamblee.security.authentication.UserMgtException;
27 import org.wamblee.security.authentication.UserSet;
28 import org.wamblee.security.authentication.UserMgtException.Reason;
29 import org.wamblee.security.encryption.Md5HexMessageDigester;
32 import java.sql.SQLException;
37 * Tests the inmemory user set. Intended to be subclassed for other
38 * implementations of user set.
40 public class InMemoryUserSetTest extends TestCase {
41 protected static final String PASSWORD = "abc123";
43 private UserSet users;
45 private GroupSet groups;
50 * This method must be overriden in subclasses.
52 * @return New user set object.
54 protected UserSet createUserSet() {
55 return new InMemoryUserSet(new RegexpNameValidator(
56 RegexpNameValidator.PASSWORD_PATTERN, Reason.INVALID_PASSWORD,
57 "Password must contain at least 6 characters"),
58 new Md5HexMessageDigester());
62 * This method must be overriden in subclasses.
64 * @return New group set object.
66 protected GroupSet createGroupSet() {
67 return new InMemoryGroupSet();
73 * @see org.wamblee.test.SpringTestCase#setUp()
76 protected void setUp() throws Exception {
78 users = createUserSet();
79 groups = createGroupSet();
80 group = new Group("group0");
85 protected UserSet getUsers() {
89 protected GroupSet getGroups() {
93 protected Group createGroup(String aName) {
94 return new Group(aName);
97 protected User createUser(String aName, String aPassword, Group aGroup)
98 throws UserMgtException {
99 return UsermgtTestUtils.createUser(aName, aPassword, aGroup);
102 protected void addUserToGroup(User aUser, Group aGroup)
103 throws UserMgtException {
104 aUser.addGroup(aGroup);
107 protected void removeUserFromGroup(User aUser, Group aGroup)
108 throws UserMgtException {
109 aUser.removeGroup(aGroup);
113 * Additional check to be implemented by a subclass.
116 * User to check for existence.
119 protected void checkUserExists(String aUser) throws Exception {
124 * Additional check to be implemented by a subclass.
127 * User to check for non-existence.
130 protected void checkUserNotExists(String aUser) throws Exception {
135 * Additional check to be implemented by a subclass.
138 * Expected number of users.
141 protected void checkUserCount(int aSize) throws Exception {
142 assertEquals(aSize, users.size());
146 * Additional check to be implemented by a subclass.
149 * User to check for existence.
152 protected void checkGroupExists(String aUser) throws Exception {
157 * Additional check to be implemented by a subclass.
160 * User to check for non-existence.
163 protected void checkGroupNotExists(String aUser) throws Exception {
168 * Additional check to be implemented by a subclass.
171 * Expected number of users.
174 protected void checkGroupCount(int aSize) throws Exception {
179 * Adds a user and verifies that the user is added using find(), list(), and
183 public void testAdd() throws Exception {
184 User user = createUser("user1", PASSWORD, group);
185 assertTrue(users.add(user));
186 checkUserExists(user.getName());
189 User user2 = users.find("user1");
190 assertNotNull(user2);
191 assertEquals(user.getName(), user2.getName());
193 Set<User> set = users.list();
194 assertEquals(1, set.size());
195 assertTrue(set.contains(user));
199 * Tries to find a non-existing user. Verifies that null is returned.
202 public void testFindUnknownUser() throws Exception {
203 User user1 = createUser("user1", PASSWORD, group);
204 User user2 = createUser("user2", PASSWORD, group);
207 checkUserExists(user1.getName());
208 checkUserExists(user2.getName());
210 assertNull(users.find("user3"));
211 checkUserNotExists("user3");
215 * Adds duplicate user. Verifies that the existing user is left untouched.
218 public void testAddDuplicateUser() throws Exception {
219 User user1 = createUser("user1", PASSWORD, group);
222 assertEquals(1, users.list().size());
223 assertTrue(users.contains(user1));
224 user1 = createUser("user1", PASSWORD, group);
225 assertFalse(users.add(user1));
226 assertEquals(1, users.list().size());
228 checkUserExists(user1.getName());
233 * Removes a user. Verifies that the user is removed and the return value is
237 public void testRemoveUser() throws Exception {
238 User user1 = createUser("user1", PASSWORD, group);
240 assertTrue(users.contains(user1));
243 assertTrue(users.remove(user1));
244 assertFalse(users.contains(user1));
245 assertNull(users.find(user1.getName()));
246 assertEquals(0, users.list().size());
251 * Removes a non-existing user. Verifies that no users are removed an that
252 * the return value is true.
255 public void testRemoveNonExistingUser() throws Exception,
257 User user1 = createUser("user1", PASSWORD, group);
261 User nonExistingUser = createUser("user2", PASSWORD, group);
262 assertFalse(users.remove(nonExistingUser));
263 assertTrue(users.contains(user1));
264 assertEquals(1, users.list().size());
269 * Adds a number of users to the set and verifies that list() returns them
273 public void testList() throws Exception {
274 User user1 = createUser("user1", PASSWORD, group);
275 User user2 = createUser("user2", PASSWORD, group);
276 User user3 = createUser("user3", PASSWORD, group);
277 assertTrue(users.add(user1));
278 assertTrue(users.add(user2));
279 assertTrue(users.add(user3));
281 checkUserExists(user1.getName());
282 checkUserExists(user2.getName());
283 checkUserExists(user3.getName());
285 Set<User> set = users.list();
286 assertTrue(set.contains(user1));
287 assertTrue(set.contains(user2));
288 assertTrue(set.contains(user3));
294 * Adds several users to different groups and verifies that the correct
295 * users are returned when looking for users in different groups.
297 * @throws SQLException
299 public void testListByGroup() throws Exception {
300 Group group1 = new Group("group1");
301 Group group2 = new Group("group2");
302 Group group3 = new Group("group3");
311 User user1 = createUser("user1", PASSWORD, group1);
312 user1.addGroup(group2);
313 user1.addGroup(group3);
315 User user2 = createUser("user2", PASSWORD, group2);
316 user2.addGroup(group3);
318 User user3 = createUser("user3", PASSWORD, group3);
323 checkUserExists(user1.getName());
324 checkUserExists(user2.getName());
325 checkUserExists(user3.getName());
327 checkGroupExists(group1.getName());
328 checkGroupExists(group2.getName());
329 checkGroupExists(group3.getName());
332 checkGroupCount(3 + 1); // also count the group that was created in the
335 Set<User> list = users.list(group1);
336 assertTrue(list.contains(user1));
337 assertEquals(1, list.size());
339 list = users.list(group2);
340 assertTrue(list.contains(user1));
341 assertTrue(list.contains(user2));
342 assertEquals(2, list.size());
344 list = users.list(group3);
345 assertTrue(list.contains(user1));
346 assertTrue(list.contains(user2));
347 assertTrue(list.contains(user3));
348 assertEquals(3, list.size());