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.
16 package org.wamblee.usermgt.hibernate;
18 import org.wamblee.cache.EhCache;
20 import org.wamblee.system.adapters.DefaultContainer;
21 import org.wamblee.system.adapters.ObjectConfiguration;
22 import org.wamblee.system.core.Scope;
23 import org.wamblee.system.spring.component.DatabaseTesterComponent;
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;
32 import java.io.Serializable;
34 import java.sql.ResultSet;
35 import java.sql.SQLException;
41 * Tests for {@link org.wamblee.usermgt.hibernate.HibernateGroupSet}
43 * @author Erik Brakkee
45 public class HibernateUserSetTest extends InMemoryUserSetTest {
49 private static final String USER_TABLE = "USERS";
54 private static final String GROUP_TABLE = "GROUPS";
59 private static final String USER_QUERY = "select * from " + USER_TABLE
65 private static final String GROUP_QUERY = "select * from " + GROUP_TABLE
71 private DefaultContainer container;
81 private UserSet userset;
86 private GroupSet groupset;
91 private EhCache<Serializable, Serializable> userCache;
96 private DatabaseTesterComponent databaseTester;
101 * @see org.wamblee.usermgt.InMemoryUserSetTest#setUp()
106 * @throws Exception DOCUMENT ME!
109 protected void setUp() throws Exception {
110 container = new UserMgtRepositoryTestContainer("top");
112 ObjectConfiguration config = new ObjectConfiguration(HibernateUserSetTest.class);
113 config.getSetterConfig().clear().add("setUserset").add("setGroupset")
114 .add("setDatabaseTester").add("setUserCache");
115 container.addComponent("testcase", this, config);
117 scope = container.start();
120 databaseTester.cleanDatabase();
128 * @param aUserset DOCUMENT ME!
130 public void setUserset(UserSet aUserset) {
137 * @param aGroupset DOCUMENT ME!
139 public void setGroupset(GroupSet aGroupset) {
140 groupset = aGroupset;
146 * @param aUserCache DOCUMENT ME!
148 public void setUserCache(EhCache<Serializable, Serializable> aUserCache) {
149 userCache = aUserCache;
155 * @param aDatabaseTester DOCUMENT ME!
157 public void setDatabaseTester(DatabaseTesterComponent aDatabaseTester) {
158 databaseTester = aDatabaseTester;
164 * @throws Exception DOCUMENT ME!
167 protected void tearDown() throws Exception {
168 container.stop(scope);
173 * Clears the user cache.
175 private void clearUserCache() {
182 * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupCount(int)
187 * @param aSize DOCUMENT ME!
189 * @throws SQLException DOCUMENT ME!
192 protected void checkUserCount(int aSize) throws SQLException {
193 databaseTester.flush();
194 super.checkUserCount(aSize);
195 assertEquals(aSize, databaseTester.getTableSize(USER_TABLE));
201 * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupExists(java.lang.String)
206 * @param aUser DOCUMENT ME!
208 * @throws SQLException DOCUMENT ME!
211 protected void checkUserExists(String aUser) throws SQLException {
212 databaseTester.flush();
214 ResultSet result = databaseTester.executeQuery(USER_QUERY, aUser);
215 assertEquals(1, databaseTester.countResultSet(result));
221 * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupNotExists(java.lang.String)
226 * @param aUser DOCUMENT ME!
228 * @throws SQLException DOCUMENT ME!
231 protected void checkUserNotExists(String aUser) throws SQLException {
232 databaseTester.flush();
234 ResultSet result = databaseTester.executeQuery(USER_QUERY, aUser);
235 assertEquals(0, databaseTester.countResultSet(result));
241 * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupCount(int)
246 * @param aSize DOCUMENT ME!
248 * @throws SQLException DOCUMENT ME!
251 protected void checkGroupCount(int aSize) throws SQLException {
252 databaseTester.flush();
253 assertEquals(aSize, databaseTester.getTableSize(GROUP_TABLE));
259 * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupExists(java.lang.String)
264 * @param aGroup DOCUMENT ME!
266 * @throws SQLException DOCUMENT ME!
269 protected void checkGroupExists(String aGroup) throws SQLException {
270 databaseTester.flush();
272 ResultSet result = databaseTester.executeQuery(GROUP_QUERY, aGroup);
273 assertEquals(1, databaseTester.countResultSet(result));
279 * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupNotExists(java.lang.String)
284 * @param aGroup DOCUMENT ME!
286 * @throws SQLException DOCUMENT ME!
289 protected void checkGroupNotExists(String aGroup) throws SQLException {
290 databaseTester.flush();
292 ResultSet result = databaseTester.executeQuery(GROUP_QUERY, aGroup);
293 assertEquals(0, databaseTester.countResultSet(result));
299 * @see org.wamblee.usermgt.InMemoryGroupSetTest#createGroupSet()
304 * @return DOCUMENT ME!
307 protected UserSet createUserSet() {
314 * @see org.wamblee.usermgt.InMemoryUserSetTest#createGroupSet()
319 * @return DOCUMENT ME!
322 protected GroupSet createGroupSet() {
327 * Reproduction of a bug. Create a user which is in group1 Add it
328 * to a second group group2. Remove the user from group1. Verify the user
331 * @throws SQLException DOCUMENT ME!
332 * @throws UserMgtException DOCUMENT ME!
334 public void testVerifyAddRemove() throws SQLException, UserMgtException {
335 databaseTester.cleanDatabase(); // just to be sure.
337 GroupSet groups = getGroups();
338 assertEquals(0, groups.size());
340 Group group1 = createGroup("group1");
341 Group group2 = createGroup("group2");
344 checkGroupExists("group1");
345 checkGroupExists("group2");
347 User user = createUser("user", PASSWORD, group1);
348 getUsers().add(user);
349 checkUserExists("user");
351 addUserToGroup(user, group2);
352 getUsers().userModified(user);
355 User user2 = getUsers().find("user");
356 Set<Group> userGroups = user2.getGroups();
357 assertTrue(user2.isInGroup("group1"));
358 assertTrue(user2.isInGroup("group2"));
359 assertEquals(2, userGroups.size());
361 removeUserFromGroup(user, group1);
362 getUsers().userModified(user);
364 user2 = getUsers().find("user");
365 userGroups = user2.getGroups();
366 assertFalse(user2.isInGroup("group1"));
367 assertTrue(user2.isInGroup("group2"));
368 assertEquals(1, userGroups.size());