ref #3658 remove nomenclatural code from datasources
[taxeditor.git] / eu.etaxonomy.taxeditor.test / src / test / java / eu / etaxonomy / taxeditor / httpinvoker / BaseRemotingTest.java
index b0424a824e5e899632f0274f4292784943b8fe77..734c9197d271f987a04d383a1d69df05beb06dcd 100644 (file)
@@ -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<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");
     }
 
 
@@ -196,6 +175,9 @@ public class BaseRemotingTest extends UnitilsJUnit4 {
     }
 
 
+    protected static void authenticateDefaultUser() {
+        authenticate(user, password);
+    }
 
 
 }