Merge branch 'release/4.1.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.test / src / test / java / eu / etaxonomy / taxeditor / httpinvoker / BaseRemotingTest.java
index 694d80e57e2f7830ea1834dd4dbaa11fde34ac65..18dfb3ba04956e1abf20216483d8de4b11da603e 100644 (file)
@@ -8,29 +8,17 @@
  */
 package eu.etaxonomy.taxeditor.httpinvoker;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
 import java.lang.reflect.Field;
-import java.net.URL;
 import java.util.Map;
-import java.util.Properties;
 
 import net.sf.ehcache.CacheManager;
 
 import org.apache.log4j.Logger;
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.Platform;
-import org.junit.Assert;
 import org.junit.BeforeClass;
-import org.osgi.framework.Bundle;
-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;
@@ -45,7 +33,6 @@ 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;
@@ -61,73 +48,24 @@ import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
  */
 @Transactional(TransactionMode.DISABLED)
 @SpringApplicationContext("file:./target/classes/eu/etaxonomy/cdm/testRemotingApplicationContext.xml")
-public abstract class BaseRemotingTest extends UnitilsJUnit4 {
-    private static final Logger logger = Logger.getLogger(BaseRemotingTest.class);
-
-
-    public static final Resource SERVER_PROPERTIES_FILE =
-            new ClassPathResource("server.properties");
+public abstract class BaseRemotingTest extends ThreadedTest {
+    @SuppressWarnings("unused")
+       private static final Logger logger = Logger.getLogger(BaseRemotingTest.class);
 
     private static ICdmRemoteSource cdmRemoteSource;
     private static CdmPersistentRemoteSource remotePersistentSource;
-
-    public static boolean useManagedServer = true;
-
-
     protected static ICdmEntitySessionManager cdmEntitySessionManager;
 
-    private final static String DEFAULT_USER = "admin";
-    private final static String DEFAULT_PASSWORD = "00000";
-
-    private static String userHomeKey = "user.home";
-
-    private static String user = DEFAULT_USER;
-    private static String password = DEFAULT_PASSWORD;
-
-    protected static CDMServer cdmServer;
-
     @BeforeClass
     public static void initializeBaseRemotingTest() {
 
         DatabaseUnitils.disableConstraints();
 
         try {
-            String userHomeDirPath;
-            Bundle bundle = Platform.getBundle("eu.etaxonomy.taxeditor.test");
-
-            URL userHomeDirURL = bundle.getEntry("src/test/resources");
-            File userHomeDir = new File(FileLocator.resolve(userHomeDirURL).toURI());
-            userHomeDirPath = userHomeDir.getAbsolutePath();
-
-            URL serverPropertiesURL = bundle.getEntry("src/test/resources/server.properties");
-            File serverPropertiesFile = new File(FileLocator.resolve(serverPropertiesURL).toURI());
-            InputStream inputStream = new FileInputStream(serverPropertiesFile);
-
-            Properties prop = new Properties();
-            if (inputStream != null) {
-                prop.load(inputStream);
-                inputStream.close();
-            }
-
-            logger.info("Setting user.home to " + userHomeDirPath);
-            System.setProperty(userHomeKey, userHomeDirPath);
-
-
-            cdmServer = new CDMServer("cdmTest", serverPropertiesURL);
-
-
-            if(prop.getProperty("user") != null) {
-                user = prop.getProperty("user");
-            }
-
-            if(prop.getProperty("password") != null) {
-                password = prop.getProperty("password");
-            }
-
-            initializeController(cdmServer.getName(),
-                    cdmServer.getHost(),
-                    cdmServer.getPort(),
-                    cdmServer.getContextPath(),
+            initializeController(sourceName,
+                    host,
+                    httpPort,
+                    contextPath,
                     NomenclaturalCode.ICNAFP,
                     user,
                     password);
@@ -136,8 +74,7 @@ public abstract class BaseRemotingTest extends UnitilsJUnit4 {
            // Assert.fail("Server failed to start. Reason : " + e.getMessage());
         }
 
-        logger.info("Emptying all caches (except model cache) ");
-        //emptyAllCachesExceptModelCache();
+
     }
 
     public static void emptyAllCachesExceptModelCache() {
@@ -163,15 +100,17 @@ public abstract class BaseRemotingTest extends UnitilsJUnit4 {
                         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();
@@ -183,8 +122,8 @@ public abstract class BaseRemotingTest extends UnitilsJUnit4 {
 
         SecurityContextHolder.setContext(sc);
         CdmApplicationState.setCurrentSecurityContext(SecurityContextHolder.getContext());
-    }
 
+    }
 
 
     protected static CdmApplicationRemoteController getRemoteApplicationController() {
@@ -211,7 +150,7 @@ public abstract class BaseRemotingTest extends UnitilsJUnit4 {
     }
 
     protected static CdmEntitySession getActiveSession() {
-        return (CdmEntitySession) getFieldValueViaReflection(cdmEntitySessionManager, "activeSession");
+        return ((InheritableThreadLocal<CdmEntitySession>) getFieldValueViaReflection(cdmEntitySessionManager, "tlActiveSession")).get();
     }
 
     protected static CdmTransientEntityCacher getCacher(ICdmEntitySessionEnabled sessionOwner) {
@@ -238,6 +177,9 @@ public abstract class BaseRemotingTest extends UnitilsJUnit4 {
     }
 
 
+    protected static void authenticateDefaultUser() {
+        authenticate(user, password);
+    }
 
 
 }