*/
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;
*/
@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);
sc.setAuthentication(authentication);
SecurityContextHolder.setContext(sc);
- }
+ CdmApplicationState.setCurrentSecurityContext(SecurityContextHolder.getContext());
+ }
protected static CdmApplicationRemoteController getRemoteApplicationController() {
- return remoteApplicationController;
+ return (CdmApplicationRemoteController) CdmApplicationState.getCurrentAppConfig();
}
protected static ICdmRemoteSource getCdmRemoteSource() {
}
protected static ICdmEntitySessionManager getCdmEntitySessionManager() {
- return cdmEntitySessionManager;
+ return cdmEntitySessionManager;
}
protected static CdmEntitySession getSession(ICdmEntitySessionEnabled sessionOwner) {
- Map<ICdmEntitySessionEnabled, CdmEntitySession> ownerSessionMap =
- (Map<ICdmEntitySessionEnabled, CdmEntitySession>) getFieldValueViaReflection(cdmEntitySessionManager, "ownerSessionMap");
- return ownerSessionMap.get(sessionOwner);
+ Map<ICdmEntitySessionEnabled, CdmEntitySession> ownerSessionMap =
+ (Map<ICdmEntitySessionEnabled, CdmEntitySession>) getFieldValueViaReflection(cdmEntitySessionManager, "ownerSessionMap");
+ return ownerSessionMap.get(sessionOwner);
}
- protected static CdmTransientEntityCacher getActiveSession() {
- return (CdmTransientEntityCacher) getFieldValueViaReflection(cdmEntitySessionManager, "activeSession");
+ protected static CdmEntitySession getActiveSession() {
+ return ((InheritableThreadLocal<CdmEntitySession>) 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");
}
}
+ protected static void authenticateDefaultUser() {
+ authenticate(user, password);
+ }
}