From b7f387ca0178938325ce7107222188d3912fc1cb Mon Sep 17 00:00:00 2001 From: Erik Brakkee Date: Wed, 14 May 2008 11:37:02 +0000 Subject: [PATCH] HibernateUserAdministrationTest now based on the component mechanism. Fixed various problems in the component mechanism itself. --- .../usermgt/UserAdministrationComponent.java | 76 +++++++++++++++---- .../UserAdministrationLightComponent.java | 2 +- .../usermgt/UserAdministrationImplTest.java | 13 +--- .../HibernateUserAdministrationTest.java | 55 ++++++++++++-- 4 files changed, 112 insertions(+), 34 deletions(-) diff --git a/security/src/main/java/org/wamblee/usermgt/UserAdministrationComponent.java b/security/src/main/java/org/wamblee/usermgt/UserAdministrationComponent.java index 9c11c1b4..d1f6a87a 100644 --- a/security/src/main/java/org/wamblee/usermgt/UserAdministrationComponent.java +++ b/security/src/main/java/org/wamblee/usermgt/UserAdministrationComponent.java @@ -19,42 +19,88 @@ import java.io.IOException; import javax.sql.DataSource; -import org.hibernate.cache.EhCacheProvider; +import org.springframework.orm.hibernate3.HibernateTemplate; import org.springframework.transaction.PlatformTransactionManager; +import org.wamblee.cache.EhCache; import org.wamblee.system.adapters.DefaultContainer; import org.wamblee.system.core.Component; import org.wamblee.system.core.DefaultProvidedInterface; import org.wamblee.system.core.DefaultRequiredInterface; +import org.wamblee.system.core.ProvidedInterface; +import org.wamblee.system.core.Scope; import org.wamblee.usermgt.hibernate.UsermgtHibernateMappingFiles; public class UserAdministrationComponent extends DefaultContainer { + private ProvidedInterface TRANSACTION_MGR = new DefaultProvidedInterface( + "transactionManager", PlatformTransactionManager.class); + private ProvidedInterface USER_CACHE = new DefaultProvidedInterface( + "userCache", EhCache.class); + private ProvidedInterface HIBERNATE_TEMPLATE = new DefaultProvidedInterface( + "hibernateTemplate", HibernateTemplate.class); + private ProvidedInterface USER_MGT = new DefaultProvidedInterface( + "usermgt", UserAdministration.class); + + private Component _hibernate; + private Component _repository; + private Component _usermgt; + + private boolean _exposeInternals; + public UserAdministrationComponent(String aName, boolean aExposeInternals) throws IOException { super(aName); + _exposeInternals = aExposeInternals; + addComponent("mappingFiles", new UsermgtHibernateMappingFiles()); - Component hibernate = new HibernateComponent("hibernate"); - addComponent(hibernate); - Component repository = new UserGroupRepositoryComponent( - "usersgroups"); - addComponent(repository); + _hibernate = new HibernateComponent("hibernate"); + addComponent(_hibernate); + + _repository = new UserGroupRepositoryComponent("usersgroups"); + addComponent(_repository); - Component usermgt = new UserAdministrationLightComponent( - "usermgtlight"); - addComponent(usermgt); + _usermgt = new UserAdministrationLightComponent("usermgtlight"); + addComponent(_usermgt); addRequiredInterface(new DefaultRequiredInterface("datasource", DataSource.class)); if (aExposeInternals) { - addProvidedInterface(new DefaultProvidedInterface( - "transactionManager", PlatformTransactionManager.class)); - addProvidedInterface(new DefaultProvidedInterface("userCache", - EhCacheProvider.class)); + addProvidedInterface(TRANSACTION_MGR); + addProvidedInterface(USER_CACHE); + addProvidedInterface(HIBERNATE_TEMPLATE); + } + addProvidedInterface(USER_MGT); + } + + @Override + protected Scope doStart(Scope aExternalScope) { + + Scope scope = super.doStart(aExternalScope); + if (_exposeInternals) { + addInterface(TRANSACTION_MGR, getInterfaceImplementation( + TRANSACTION_MGR, _hibernate, scope), aExternalScope); + addInterface(USER_CACHE, getInterfaceImplementation(USER_CACHE, + _repository, scope), aExternalScope); + addInterface(HIBERNATE_TEMPLATE, getInterfaceImplementation( + HIBERNATE_TEMPLATE, _hibernate, scope), aExternalScope); } - addProvidedInterface(new DefaultProvidedInterface("usermgt", - UserAdministration.class)); + addInterface(USER_MGT, getInterfaceImplementation(USER_MGT, _usermgt, + scope), aExternalScope); + return scope; + } + + private Object getInterfaceImplementation(ProvidedInterface aInterface, + Component aSource, Scope aScope) { + for (ProvidedInterface provided : aSource.getProvidedInterfaces()) { + if (provided.equals(aInterface)) { + return aScope + .getInterfaceImplementation(provided, Object.class); + } + } + throw new IllegalArgumentException("Provided interface '" + aInterface + + "' not found in component '" + aSource + "'"); } } diff --git a/security/src/main/java/org/wamblee/usermgt/UserAdministrationLightComponent.java b/security/src/main/java/org/wamblee/usermgt/UserAdministrationLightComponent.java index a030dc9c..efd42286 100644 --- a/security/src/main/java/org/wamblee/usermgt/UserAdministrationLightComponent.java +++ b/security/src/main/java/org/wamblee/usermgt/UserAdministrationLightComponent.java @@ -47,7 +47,7 @@ public class UserAdministrationLightComponent extends SpringComponent { private static Map createProvided() { Map provided = new HashMap(); - provided.put("userAdministration", new DefaultProvidedInterface("org.wamblee.usermgt.UserAdministration", + provided.put(UserAdministration.class.getName(), new DefaultProvidedInterface("org.wamblee.usermgt.UserAdministration", UserAdministration.class)); return provided; } diff --git a/security/src/test/java/org/wamblee/usermgt/UserAdministrationImplTest.java b/security/src/test/java/org/wamblee/usermgt/UserAdministrationImplTest.java index c64f5718..4ca03fb6 100644 --- a/security/src/test/java/org/wamblee/usermgt/UserAdministrationImplTest.java +++ b/security/src/test/java/org/wamblee/usermgt/UserAdministrationImplTest.java @@ -18,6 +18,8 @@ package org.wamblee.usermgt; import java.util.Set; +import junit.framework.TestCase; + import org.apache.log4j.Logger; import org.wamblee.persistence.hibernate.HibernateMappingFiles; import org.wamblee.security.encryption.Md5HexMessageDigester; @@ -30,7 +32,7 @@ import org.wamblee.usermgt.UserMgtException.Reason; * * @author Erik Brakkee */ -public class UserAdministrationImplTest extends SpringTestCase { +public class UserAdministrationImplTest extends TestCase { private static final Logger LOGGER = Logger .getLogger(UserAdministrationImplTest.class); @@ -49,15 +51,6 @@ public class UserAdministrationImplTest extends SpringTestCase { private UserAdministration _admin; - public UserAdministrationImplTest() { - super(SpringConfigFiles.class, HibernateMappingFiles.class); - } - - public UserAdministrationImplTest( - Class aSprings, - Class aMappings) { - super(aSprings, aMappings); - } /* * (non-Javadoc) diff --git a/security/src/test/java/org/wamblee/usermgt/hibernate/HibernateUserAdministrationTest.java b/security/src/test/java/org/wamblee/usermgt/hibernate/HibernateUserAdministrationTest.java index e9aa4688..d0fc434a 100644 --- a/security/src/test/java/org/wamblee/usermgt/hibernate/HibernateUserAdministrationTest.java +++ b/security/src/test/java/org/wamblee/usermgt/hibernate/HibernateUserAdministrationTest.java @@ -16,15 +16,22 @@ package org.wamblee.usermgt.hibernate; +import java.io.Serializable; import java.lang.reflect.Method; import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.wamblee.cache.Cache; +import org.wamblee.cache.EhCache; import org.wamblee.general.BeanKernel; +import org.wamblee.system.adapters.DefaultContainer; +import org.wamblee.system.adapters.ObjectConfiguration; +import org.wamblee.system.core.Scope; +import org.wamblee.system.spring.DatabaseTesterComponent; import org.wamblee.test.spring.TestTransactionCallbackWithoutResult; import org.wamblee.usermgt.UserAdministration; +import org.wamblee.usermgt.UserAdministrationComponent; import org.wamblee.usermgt.UserAdministrationImplTest; import org.wamblee.usermgt.UsermgtSpringConfigFiles; @@ -40,19 +47,51 @@ public class HibernateUserAdministrationTest extends UserAdministrationImplTest private static final Log LOG = LogFactory.getLog(HibernateUserAdministrationTest.class); - public HibernateUserAdministrationTest() { - super(UsermgtSpringConfigFiles.class, - UsermgtHibernateMappingFiles.class); - } + private DefaultContainer _container; + private Scope _scope; + + private DatabaseTesterComponent _databaseTester; + private EhCache _userCache; + private UserAdministration _userAdmin; + /* (non-Javadoc) * @see org.wamblee.usermgt.UserAdministrationImplTest#setUp() */ @Override protected void setUp() throws Exception { + + _container = new DefaultContainer("top"); + _container.addComponent(new ExternalDatasourceComponent("datasource")); + _container.addComponent(new UserAdministrationComponent("admin", true)); + + _container.addComponent("databaseTester", DatabaseTesterComponent.class); + + ObjectConfiguration config = new ObjectConfiguration( + HibernateUserAdministrationTest.class); + config.getSetterConfig().clear().add( + "userCache").add("databaseTester").add("userAdmin"); + _container.addComponent("testcase", this, config); + + _scope = _container.start(); + + _databaseTester.cleanDatabase(); + super.setUp(); clearUserCache(); } + + public void setUserCache(EhCache aUserCache) { + _userCache = aUserCache; + } + + public void setDatabaseTester(DatabaseTesterComponent aDatabaseTester) { + _databaseTester = aDatabaseTester; + } + + public void setUserAdmin(UserAdministration aUserAdmin) { + _userAdmin = aUserAdmin; + } /* * (non-Javadoc) @@ -61,7 +100,7 @@ public class HibernateUserAdministrationTest extends UserAdministrationImplTest */ @Override protected UserAdministration createAdmin() { - return BeanKernel.getBeanFactory().find(UserAdministration.class); + return _userAdmin; } public void testAllTestsInASeparateTransaction() throws SQLException { @@ -69,9 +108,9 @@ public class HibernateUserAdministrationTest extends UserAdministrationImplTest Method[] methods = UserAdministrationImplTest.class.getMethods(); for (final Method method : methods) { if (method.getName().startsWith("test")) { - cleanDatabase(); + _databaseTester.cleanDatabase(); clearUserCache(); - executeTransaction(new TestTransactionCallbackWithoutResult() { + _databaseTester.executeTransaction(new TestTransactionCallbackWithoutResult() { public void execute() throws Exception { LOG.info("Running test " + method.getName()); try { @@ -94,6 +133,6 @@ public class HibernateUserAdministrationTest extends UserAdministrationImplTest * */ private void clearUserCache() { - BeanKernel.getBeanFactory().find("userCache", Cache.class).clear(); + _userCache.clear(); } } -- 2.31.1