X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/95b6f6f5e7d370c4ddd38977e6220843c6346147..10644642520a51c1c7c2f8fee5707edfc871de0b:/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/BaseRemotingTest.java diff --git a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/BaseRemotingTest.java b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/BaseRemotingTest.java index b0424a824..734c9197d 100644 --- a/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/BaseRemotingTest.java +++ b/eu.etaxonomy.taxeditor.test/src/test/java/eu/etaxonomy/taxeditor/httpinvoker/BaseRemotingTest.java @@ -8,33 +8,30 @@ */ package eu.etaxonomy.taxeditor.httpinvoker; -import java.io.IOException; import java.lang.reflect.Field; import java.util.Map; -import org.junit.AfterClass; -import org.junit.Assert; +import net.sf.ehcache.CacheManager; + +import org.apache.log4j.Logger; import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.core.io.ClassPathResource; -import org.springframework.core.io.Resource; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextImpl; -import org.unitils.UnitilsJUnit4; import org.unitils.database.DatabaseUnitils; import org.unitils.database.annotations.Transactional; import org.unitils.database.util.TransactionMode; import org.unitils.spring.annotation.SpringApplicationContext; import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteController; -import eu.etaxonomy.cdm.model.name.NomenclaturalCode; -import eu.etaxonomy.taxeditor.remoting.cache.CdmClientCacheException; +import eu.etaxonomy.cdm.api.application.CdmApplicationState; +import eu.etaxonomy.cdm.api.application.CdmDataChangeService; +import eu.etaxonomy.cdm.api.cache.CdmServiceCacher; +import eu.etaxonomy.taxeditor.remoting.cache.CdmRemoteCacheManager; import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher; import eu.etaxonomy.taxeditor.remoting.source.CdmPersistentRemoteSource; import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSource; -import eu.etaxonomy.taxeditor.remoting.source.CdmRemoteSourceException; import eu.etaxonomy.taxeditor.remoting.source.ICdmRemoteSource; import eu.etaxonomy.taxeditor.session.CdmEntitySession; import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled; @@ -50,80 +47,70 @@ import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; */ @Transactional(TransactionMode.DISABLED) @SpringApplicationContext("file:./target/classes/eu/etaxonomy/cdm/testRemotingApplicationContext.xml") -public class BaseRemotingTest extends UnitilsJUnit4 { - //private static final Logger logger = Logger.getLogger(BaseRemotingTest.class); - - private static final Resource TEST_REMOTE_APPLICATION_CONTEXT_RESOURCE = - new ClassPathResource("/eu/etaxonomy/cdm/testRemotingApplicationContext.xml"); +public abstract class BaseRemotingTest extends ThreadedTest { + @SuppressWarnings("unused") + private static final Logger logger = Logger.getLogger(BaseRemotingTest.class); - private static CdmApplicationRemoteController remoteApplicationController; private static ICdmRemoteSource cdmRemoteSource; private static CdmPersistentRemoteSource remotePersistentSource; - - public static boolean useManagedServer = false; - - public static final Resource CDMLIB_DISK_STORE_RESOURCE = - new ClassPathResource("/eu/etaxonomy/cache"); - protected static ICdmEntitySessionManager cdmEntitySessionManager; - @BeforeClass public static void initializeBaseRemotingTest() { - //NOTE: Run this the cdmTest H2 DB whenever it needs to be - // recreated e.g. after a model change - DatabaseUnitils.disableConstraints(); - - try { - System.setProperty("ehcache.disk.store.dir", CDMLIB_DISK_STORE_RESOURCE.getFile().getAbsolutePath()); - } catch (IOException e) { - throw new CdmClientCacheException(e); - } - - useManagedServer = (System.getProperty("use.managed.server") == null) ? useManagedServer : Boolean.valueOf(System.getProperty("use.managed.server")); - if(useManagedServer) { - try { - CDMServer.getInstance().start(); - } catch (Exception e) { - e.printStackTrace(); - Assert.fail("Server failed to start. Reason : " + e.getMessage()); - } - initializeController(CDMServer.getInstance().getName(), - CDMServer.getInstance().getHost(), - CDMServer.getInstance().getPort(), - CDMServer.getInstance().getContextPath(), - NomenclaturalCode.ICNAFP, - "admin", - "00000"); + DatabaseUnitils.disableConstraints(); + + try { + initializeController(sourceName, + host, + httpPort, + contextPath, + user, + password); + } catch (Exception e) { + e.printStackTrace(); + // Assert.fail("Server failed to start. Reason : " + e.getMessage()); } } - - @Test - public void disableConstraints() { - // To be run on the src/test/resources/h2/cdmTest h2 db after - // updating the unitils.properties 'database.url' property - DatabaseUnitils.disableConstraints(); + public static void emptyAllCachesExceptModelCache() { + CacheManager cm = CacheManager.create(); + String[] cacheNames = CacheManager.create().getCacheNames(); + for(String cacheName : cacheNames) { + if(!cacheName.equals(CdmRemoteCacheManager.CDM_MODEL_CACHE_NAME)) { + cm.removeCache(cacheName); + } + } } - public static void initializeController(String sourceName, String host, int port, String contextPath, NomenclaturalCode ncode, String username, String password) { - cdmRemoteSource = CdmRemoteSource.NewInstance(sourceName, host, port, contextPath, ncode); - remoteApplicationController = + public static void initializeController(String sourceName, String host, int port, String contextPath, String username, String password) { + + if(CdmApplicationState.getCurrentAppConfig() != null) { + return; + } + cdmRemoteSource = CdmRemoteSource.NewInstance(sourceName, host, port, contextPath); + CdmApplicationRemoteController remoteApplicationController = CdmApplicationRemoteController.NewInstance(cdmRemoteSource, null, null); + CdmApplicationState.setCurrentAppConfig(remoteApplicationController); + CdmApplicationState.setCdmServiceCacher(new CdmServiceCacher()); - try { - remotePersistentSource = CdmPersistentRemoteSource.NewInstance(sourceName); - } catch (CdmRemoteSourceException e) { - Assert.fail("Default Remote Persistent Source failed to load. Reason : " + e.getMessage()); - } cdmEntitySessionManager = getRemoteApplicationController().getCdmEntitySessionManager(); + CdmApplicationState.setCurrentDataChangeService(new CdmDataChangeService()); + + authenticate(username, password); + + } + + protected static void authenticate(String username, String password) { + + //FIXME:Remoting the authentication code should be replaced by a method call which actually + // does the authentication in the editor code so that the 'real' authentication can be tested SecurityContextHolder.clearContext(); SecurityContextImpl sc = new SecurityContextImpl(); Authentication token = new UsernamePasswordAuthenticationToken(username,password); @@ -132,12 +119,13 @@ public class BaseRemotingTest extends UnitilsJUnit4 { sc.setAuthentication(authentication); SecurityContextHolder.setContext(sc); - } + CdmApplicationState.setCurrentSecurityContext(SecurityContextHolder.getContext()); + } protected static CdmApplicationRemoteController getRemoteApplicationController() { - return remoteApplicationController; + return (CdmApplicationRemoteController) CdmApplicationState.getCurrentAppConfig(); } protected static ICdmRemoteSource getCdmRemoteSource() { @@ -149,31 +137,22 @@ public class BaseRemotingTest extends UnitilsJUnit4 { } protected static ICdmEntitySessionManager getCdmEntitySessionManager() { - return cdmEntitySessionManager; + return cdmEntitySessionManager; } protected static CdmEntitySession getSession(ICdmEntitySessionEnabled sessionOwner) { - Map ownerSessionMap = - (Map) getFieldValueViaReflection(cdmEntitySessionManager, "ownerSessionMap"); - return ownerSessionMap.get(sessionOwner); + Map ownerSessionMap = + (Map) getFieldValueViaReflection(cdmEntitySessionManager, "ownerSessionMap"); + return ownerSessionMap.get(sessionOwner); } - protected static CdmTransientEntityCacher getActiveSession() { - return (CdmTransientEntityCacher) getFieldValueViaReflection(cdmEntitySessionManager, "activeSession"); + protected static CdmEntitySession getActiveSession() { + return ((InheritableThreadLocal) getFieldValueViaReflection(cdmEntitySessionManager, "tlActiveSession")).get(); } protected static CdmTransientEntityCacher getCacher(ICdmEntitySessionEnabled sessionOwner) { - return (CdmTransientEntityCacher) getFieldValueViaReflection(getSession(sessionOwner), "cdmTransientEntityCacher"); - } - - @AfterClass - public static void cleanup() { - try { - CDMServer.getInstance().stop(); - } catch (Exception e) { - Assert.fail("Server could not be stopped. Reason : " + e.getMessage()); - } + return (CdmTransientEntityCacher) getFieldValueViaReflection(getSession(sessionOwner), "cdmTransientEntityCacher"); } @@ -196,6 +175,9 @@ public class BaseRemotingTest extends UnitilsJUnit4 { } + protected static void authenticateDefaultUser() { + authenticate(user, password); + } }