/* * Copyright 2005 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.wamblee.usermgt.hibernate; import org.wamblee.cache.EhCache; import org.wamblee.system.adapters.DefaultContainer; import org.wamblee.system.adapters.ObjectConfiguration; import org.wamblee.system.core.Scope; import org.wamblee.system.spring.component.DatabaseTesterComponent; import org.wamblee.usermgt.Group; import org.wamblee.usermgt.GroupSet; import org.wamblee.usermgt.InMemoryUserSetTest; import org.wamblee.usermgt.User; import org.wamblee.usermgt.UserMgtException; import org.wamblee.usermgt.UserSet; import java.io.Serializable; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Set; /** * Tests for {@link org.wamblee.usermgt.hibernate.HibernateGroupSet} * * @author Erik Brakkee */ public class HibernateUserSetTest extends InMemoryUserSetTest { /** * DOCUMENT ME! */ private static final String USER_TABLE = "USERS"; /** * DOCUMENT ME! */ private static final String GROUP_TABLE = "GROUPS"; /** * DOCUMENT ME! */ private static final String USER_QUERY = "select * from " + USER_TABLE + " where name = ?"; /** * DOCUMENT ME! */ private static final String GROUP_QUERY = "select * from " + GROUP_TABLE + " where name = ?"; /** * DOCUMENT ME! */ private DefaultContainer container; /** * DOCUMENT ME! */ private Scope scope; /** * DOCUMENT ME! */ private UserSet userset; /** * DOCUMENT ME! */ private GroupSet groupset; /** * DOCUMENT ME! */ private EhCache userCache; /** * DOCUMENT ME! */ private DatabaseTesterComponent databaseTester; /* * (non-Javadoc) * * @see org.wamblee.usermgt.InMemoryUserSetTest#setUp() */ /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ @Override protected void setUp() throws Exception { container = new UserMgtRepositoryTestContainer("top"); ObjectConfiguration config = new ObjectConfiguration(HibernateUserSetTest.class); config.getSetterConfig().clear().add("setUserset").add("setGroupset") .add("setDatabaseTester").add("setUserCache"); container.addComponent("testcase", this, config); scope = container.start(); clearUserCache(); databaseTester.cleanDatabase(); super.setUp(); } /** * DOCUMENT ME! * * @param aUserset DOCUMENT ME! */ public void setUserset(UserSet aUserset) { userset = aUserset; } /** * DOCUMENT ME! * * @param aGroupset DOCUMENT ME! */ public void setGroupset(GroupSet aGroupset) { groupset = aGroupset; } /** * DOCUMENT ME! * * @param aUserCache DOCUMENT ME! */ public void setUserCache(EhCache aUserCache) { userCache = aUserCache; } /** * DOCUMENT ME! * * @param aDatabaseTester DOCUMENT ME! */ public void setDatabaseTester(DatabaseTesterComponent aDatabaseTester) { databaseTester = aDatabaseTester; } /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ @Override protected void tearDown() throws Exception { container.stop(scope); super.tearDown(); } /** * Clears the user cache. */ private void clearUserCache() { userCache.clear(); } /* * (non-Javadoc) * * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupCount(int) */ /** * DOCUMENT ME! * * @param aSize DOCUMENT ME! * * @throws SQLException DOCUMENT ME! */ @Override protected void checkUserCount(int aSize) throws SQLException { databaseTester.flush(); super.checkUserCount(aSize); assertEquals(aSize, databaseTester.getTableSize(USER_TABLE)); } /* * (non-Javadoc) * * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupExists(java.lang.String) */ /** * DOCUMENT ME! * * @param aUser DOCUMENT ME! * * @throws SQLException DOCUMENT ME! */ @Override protected void checkUserExists(String aUser) throws SQLException { databaseTester.flush(); ResultSet result = databaseTester.executeQuery(USER_QUERY, aUser); assertEquals(1, databaseTester.countResultSet(result)); } /* * (non-Javadoc) * * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupNotExists(java.lang.String) */ /** * DOCUMENT ME! * * @param aUser DOCUMENT ME! * * @throws SQLException DOCUMENT ME! */ @Override protected void checkUserNotExists(String aUser) throws SQLException { databaseTester.flush(); ResultSet result = databaseTester.executeQuery(USER_QUERY, aUser); assertEquals(0, databaseTester.countResultSet(result)); } /* * (non-Javadoc) * * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupCount(int) */ /** * DOCUMENT ME! * * @param aSize DOCUMENT ME! * * @throws SQLException DOCUMENT ME! */ @Override protected void checkGroupCount(int aSize) throws SQLException { databaseTester.flush(); assertEquals(aSize, databaseTester.getTableSize(GROUP_TABLE)); } /* * (non-Javadoc) * * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupExists(java.lang.String) */ /** * DOCUMENT ME! * * @param aGroup DOCUMENT ME! * * @throws SQLException DOCUMENT ME! */ @Override protected void checkGroupExists(String aGroup) throws SQLException { databaseTester.flush(); ResultSet result = databaseTester.executeQuery(GROUP_QUERY, aGroup); assertEquals(1, databaseTester.countResultSet(result)); } /* * (non-Javadoc) * * @see org.wamblee.usermgt.InMemoryGroupSetTest#checkGroupNotExists(java.lang.String) */ /** * DOCUMENT ME! * * @param aGroup DOCUMENT ME! * * @throws SQLException DOCUMENT ME! */ @Override protected void checkGroupNotExists(String aGroup) throws SQLException { databaseTester.flush(); ResultSet result = databaseTester.executeQuery(GROUP_QUERY, aGroup); assertEquals(0, databaseTester.countResultSet(result)); } /* * (non-Javadoc) * * @see org.wamblee.usermgt.InMemoryGroupSetTest#createGroupSet() */ /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override protected UserSet createUserSet() { return userset; } /* * (non-Javadoc) * * @see org.wamblee.usermgt.InMemoryUserSetTest#createGroupSet() */ /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override protected GroupSet createGroupSet() { return groupset; } /** * Reproduction of a bug. Create a user which is in group1 Add it * to a second group group2. Remove the user from group1. Verify the user * is in group2. * * @throws SQLException DOCUMENT ME! * @throws UserMgtException DOCUMENT ME! */ public void testVerifyAddRemove() throws SQLException, UserMgtException { databaseTester.cleanDatabase(); // just to be sure. GroupSet groups = getGroups(); assertEquals(0, groups.size()); Group group1 = createGroup("group1"); Group group2 = createGroup("group2"); groups.add(group1); groups.add(group2); checkGroupExists("group1"); checkGroupExists("group2"); User user = createUser("user", PASSWORD, group1); getUsers().add(user); checkUserExists("user"); addUserToGroup(user, group2); getUsers().userModified(user); clearUserCache(); User user2 = getUsers().find("user"); Set userGroups = user2.getGroups(); assertTrue(user2.isInGroup("group1")); assertTrue(user2.isInGroup("group2")); assertEquals(2, userGroups.size()); removeUserFromGroup(user, group1); getUsers().userModified(user); clearUserCache(); user2 = getUsers().find("user"); userGroups = user2.getGroups(); assertFalse(user2.isInGroup("group1")); assertTrue(user2.isInGroup("group2")); assertEquals(1, userGroups.size()); } }