fixed issues with resource loading for maven int tests
[taxeditor.git] / eu.etaxonomy.taxeditor.test / src / test / java / eu / etaxonomy / taxeditor / httpinvoker / BaseRemotingTest.java
index 420dcb5f52c252e808e23b6106437d8368dee861..9b78aa28716ae7ad8504efcfa609d0491f95675d 100644 (file)
@@ -8,16 +8,21 @@
  */
 package eu.etaxonomy.taxeditor.httpinvoker;
 
+import java.io.File;
 import java.io.InputStream;
 import java.lang.reflect.Field;
+import java.net.URL;
 import java.util.Map;
 import java.util.Properties;
 
 import org.apache.log4j.Logger;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.osgi.framework.Bundle;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.core.io.Resource;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -58,6 +63,9 @@ public class BaseRemotingTest extends UnitilsJUnit4 {
     public static final Resource SERVER_PROPERTIES_FILE =
             new ClassPathResource("server.properties");
 
+    public static final Resource EDITOR_DATASOURCES_FILE =
+            new ClassPathResource(".cdmLibrary/writableResources/cdm.datasources.xml");
+
     private static CdmApplicationRemoteController remoteApplicationController;
     private static ICdmRemoteSource cdmRemoteSource;
     private static CdmPersistentRemoteSource remotePersistentSource;
@@ -70,71 +78,87 @@ public class BaseRemotingTest extends UnitilsJUnit4 {
     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;
 
     @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();
+        //      recreated e.g. after a model change
+        DatabaseUnitils.disableConstraints();
 
+        try {
+            String userHomeDirPath;
+            Bundle bundle = Platform.getBundle("eu.etaxonomy.taxeditor.test");
+            // if bundle is null then we are running as junit test in eclipse
+            if(bundle == null) {
+                userHomeDirPath = EDITOR_DATASOURCES_FILE.getFile().getParentFile().getParentFile().getParent();
+            } else {
+                // ... else we are running in maven which requires loading the dir via the
+                // classpath bundle
+                URL userHomeDirURL = bundle.getEntry("src/test/resources");
+                File userHomeDir = new File(FileLocator.resolve(userHomeDirURL).toURI());
+                userHomeDirPath = userHomeDir.getAbsolutePath();
+            }
 
-        useManagedServer = (System.getProperty("use.managed.server") == null) ? useManagedServer : Boolean.valueOf(System.getProperty("use.managed.server"));
-        if(useManagedServer) {
-            try {
-                CDMServer cdmServer = CDMServer.getInstance();
-                Properties prop = new Properties();
-                InputStream inputStream = SERVER_PROPERTIES_FILE.getInputStream();
 
-                if (inputStream != null) {
-                    prop.load(inputStream);
-                }
+            logger.info("Setting user.home to " + userHomeDirPath);
+            System.setProperty(userHomeKey, userHomeDirPath);
 
-                if(prop.getProperty("httpPort") != null) {
-                    cdmServer.setHttpPort(Integer.valueOf(prop.getProperty("httpPort")));
-                }
+            CDMServer cdmServer = CDMServer.getInstance();
 
-                if(prop.getProperty("stopPort") != null) {
-                    cdmServer.setStopPort(Integer.valueOf(prop.getProperty("stopPort")));
-                }
 
-                if(prop.getProperty("stopKey") != null) {
-                    cdmServer.setStopKey(prop.getProperty("stopKey"));
-                }
+            Properties prop = new Properties();
+            InputStream inputStream = SERVER_PROPERTIES_FILE.getInputStream();
 
-                if(prop.getProperty("user") != null) {
-                   user = prop.getProperty("user");
-                }
+            if (inputStream != null) {
+                prop.load(inputStream);
+                inputStream.close();
+            }
 
-                if(prop.getProperty("password") != null) {
-                    password = prop.getProperty("password");
-                 }
+            if(prop.getProperty("httpPort") != null) {
+                cdmServer.setHttpPort(Integer.valueOf(prop.getProperty("httpPort")));
+            }
 
-                cdmServer.start();
-            } catch (Exception e) {
-                e.printStackTrace();
-                Assert.fail("Server failed to start. Reason : " + e.getMessage());
+            if(prop.getProperty("stopPort") != null) {
+                cdmServer.setStopPort(Integer.valueOf(prop.getProperty("stopPort")));
             }
 
-        initializeController(CDMServer.getInstance().getName(),
-                CDMServer.getInstance().getHost(),
-                CDMServer.getInstance().getPort(),
-                CDMServer.getInstance().getContextPath(),
-                NomenclaturalCode.ICNAFP,
-                user,
-                password);
-        }
+            if(prop.getProperty("stopKey") != null) {
+                cdmServer.setStopKey(prop.getProperty("stopKey"));
+            }
+
+            if(prop.getProperty("user") != null) {
+                user = prop.getProperty("user");
+            }
 
+            if(prop.getProperty("password") != null) {
+                password = prop.getProperty("password");
+            }
 
+            cdmServer.start();
+            initializeController(CDMServer.getInstance().getName(),
+                    CDMServer.getInstance().getHost(),
+                    CDMServer.getInstance().getPort(),
+                    CDMServer.getInstance().getContextPath(),
+                    NomenclaturalCode.ICNAFP,
+                    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();
+        // To be run on the src/test/resources/h2/cdmTest h2 db after
+        // updating the unitils.properties 'database.url' property
+        DatabaseUnitils.disableConstraints();
     }
 
 
@@ -181,22 +205,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");
+        return (CdmTransientEntityCacher) getFieldValueViaReflection(cdmEntitySessionManager, "activeSession");
     }
 
     protected static CdmTransientEntityCacher getCacher(ICdmEntitySessionEnabled sessionOwner) {
-       return (CdmTransientEntityCacher) getFieldValueViaReflection(getSession(sessionOwner), "cdmTransientEntityCacher");
+        return (CdmTransientEntityCacher) getFieldValueViaReflection(getSession(sessionOwner), "cdmTransientEntityCacher");
     }
 
     @AfterClass