HibernateUserAdministrationTest now based on the component mechanism.
authorerik <erik@77661180-640e-0410-b3a8-9f9b13e6d0e0>
Wed, 14 May 2008 11:37:02 +0000 (11:37 +0000)
committererik <erik@77661180-640e-0410-b3a8-9f9b13e6d0e0>
Wed, 14 May 2008 11:37:02 +0000 (11:37 +0000)
Fixed various problems in the component mechanism itself.

security/src/main/java/org/wamblee/usermgt/UserAdministrationComponent.java
security/src/main/java/org/wamblee/usermgt/UserAdministrationLightComponent.java
security/src/test/java/org/wamblee/usermgt/UserAdministrationImplTest.java
security/src/test/java/org/wamblee/usermgt/hibernate/HibernateUserAdministrationTest.java

index 9c11c1b4d98c2ab1bb40f49c91985b6b758d544a..d1f6a87ab206099fc86d6180e9eeb20600fdee9d 100644 (file)
@@ -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 + "'");
     }
 }
index a030dc9c2294ca40945a30ea9bb83f90843dbd8e..efd42286e13b5c88a3af59637e33e0eb9cf08e6f 100644 (file)
@@ -47,7 +47,7 @@ public class UserAdministrationLightComponent extends SpringComponent {
 
     private static Map<String, ProvidedInterface> createProvided() {
         Map<String, ProvidedInterface> provided = new HashMap<String, ProvidedInterface>();
-        provided.put("userAdministration", new DefaultProvidedInterface("org.wamblee.usermgt.UserAdministration",
+        provided.put(UserAdministration.class.getName(), new DefaultProvidedInterface("org.wamblee.usermgt.UserAdministration",
                 UserAdministration.class));
         return provided;
     }
index c64f5718d132faaef8e872e5ca188ba47294145e..4ca03fb676f51eb32f9246e866baa52f89117446 100644 (file)
@@ -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<? extends SpringConfigFiles> aSprings,
-            Class<? extends HibernateMappingFiles> aMappings) {
-        super(aSprings, aMappings);
-    }
 
     /*
      * (non-Javadoc)
index e9aa46889f1bad74755aa4bbb501d83e24b83b37..d0fc434ab11f4f06196d496dbd19e6a3e29f2c59 100644 (file)
 
 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<Serializable, Serializable> _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<Serializable, Serializable> 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();
     }
 }