UNOMI-72 Fix integration and performance tests
- Integration tests should now execute again, but some tests still fail.

Signed-off-by: Serge Huber <shu...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/53fb16ea
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/53fb16ea
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/53fb16ea

Branch: refs/heads/feature-DMF-1343
Commit: 53fb16eadfe81d001007e0c306303e81f0648eed
Parents: ef86038
Author: Serge Huber <shu...@apache.org>
Authored: Mon May 29 14:10:22 2017 +0200
Committer: Serge Huber <shu...@apache.org>
Committed: Mon May 29 14:10:22 2017 +0200

----------------------------------------------------------------------
 itests/pom.xml                                  | 11 ++++--
 .../java/org/apache/unomi/itests/BaseIT.java    |  4 ++-
 .../ElasticSearchPersistenceServiceImpl.java    |  9 ++++-
 .../resources/OSGI-INF/blueprint/blueprint.xml  |  2 +-
 .../PropertyConditionESQueryBuilder.java        | 35 ++++++++++++++++++--
 pom.xml                                         |  8 +++--
 .../services/services/ClusterServiceImpl.java   | 17 +++++++++-
 7 files changed, 75 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/53fb16ea/itests/pom.xml
----------------------------------------------------------------------
diff --git a/itests/pom.xml b/itests/pom.xml
index 868fb1f..6f3724c 100644
--- a/itests/pom.xml
+++ b/itests/pom.xml
@@ -122,6 +122,12 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-simple</artifactId>
+            <version>1.6.6</version>
+            <scope>test</scope>
+        </dependency>
 
     </dependencies>
 
@@ -147,8 +153,8 @@
                 <version>5.7</version>
                 <configuration>
                     <clusterName>contextElasticSearch</clusterName>
-                    <transportPort>9300</transportPort>
-                    <httpPort>9200</httpPort>
+                    <transportPort>9500</transportPort>
+                    <httpPort>9400</httpPort>
                     <version>${elasticsearch.version}</version>
                 </configuration>
                 <executions>
@@ -175,6 +181,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-failsafe-plugin</artifactId>
+                <version>2.18.1</version>
                 <configuration>
                     <includes>
                         <include>**/*AllITs.java</include>

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/53fb16ea/itests/src/test/java/org/apache/unomi/itests/BaseIT.java
----------------------------------------------------------------------
diff --git a/itests/src/test/java/org/apache/unomi/itests/BaseIT.java 
b/itests/src/test/java/org/apache/unomi/itests/BaseIT.java
index 6a10a4d..cfb8ed3 100644
--- a/itests/src/test/java/org/apache/unomi/itests/BaseIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/BaseIT.java
@@ -85,11 +85,13 @@ public abstract class BaseIT {
                         .unpackDirectory(new File("target/exam"))
                         .useDeployFolder(false),
                 keepRuntimeFolder(),
-                configureConsole().ignoreLocalConsole().ignoreRemoteShell(),
+                configureConsole().ignoreLocalConsole(),
                 logLevel(LogLevel.INFO),
 //                editConfigurationFilePut("etc/org.ops4j.pax.web.cfg", 
"org.osgi.service.http.port", HTTP_PORT),
 //                
systemProperty("org.osgi.service.http.port").value(HTTP_PORT),
                 
systemProperty("org.ops4j.pax.exam.rbc.rmi.port").value("1199"),
+                
systemProperty("org.apache.unomi.itests.elasticsearch.transport.port").value("9500"),
+                
systemProperty("org.apache.unomi.itests.elasticsearch.http.port").value("9400"),
                 features(karafPaxWebRepo, "war"),
                 features(karafCxfRepo, "cxf"),
                 features(karafCellarRepo, "cellar"),

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/53fb16ea/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
 
b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
index 4e66418..bdd676d 100644
--- 
a/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
+++ 
b/persistence-elasticsearch/core/src/main/java/org/apache/unomi/persistence/elasticsearch/ElasticSearchPersistenceServiceImpl.java
@@ -143,7 +143,7 @@ public class ElasticSearchPersistenceServiceImpl implements 
PersistenceService,
     private String bulkProcessorBackoffPolicy = "exponential";
 
     private String minimalElasticSearchVersion = "5.0.0";
-    private String maximalElasticSearchVersion = "5.2.0";
+    private String maximalElasticSearchVersion = "5.3.0";
 
     private Map<String, Map<String, Map<String, Object>>> knownMappings = new 
HashMap<>();
 
@@ -258,6 +258,13 @@ public class ElasticSearchPersistenceServiceImpl 
implements PersistenceService,
 
                 Settings transportSettings = Settings.builder()
                         .put(CLUSTER_NAME, clusterName).build();
+
+                // this property is used for integration tests, to make sure 
we don't conflict with an already running ElasticSearch instance.
+                if 
(System.getProperty("org.apache.unomi.itests.elasticsearch.transport.port") != 
null) {
+                    elasticSearchAddressList.clear();
+                    elasticSearchAddressList.add("localhost:" + 
System.getProperty("org.apache.unomi.itests.elasticsearch.transport.port"));
+                }
+
                 client = new PreBuiltTransportClient(transportSettings);
                 for (String elasticSearchAddress : elasticSearchAddressList) {
                     String[] elasticSearchAddressParts = 
elasticSearchAddress.split(":");

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/53fb16ea/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git 
a/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
 
b/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index 3ca23a9..ce6d99b 100644
--- 
a/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ 
b/persistence-elasticsearch/core/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -47,7 +47,7 @@
             <cm:property name="bulkProcessor.backoffPolicy" 
value="exponential" />
 
             <cm:property name="minimalElasticSearchVersion" value="5.0.0" />
-            <cm:property name="maximalElasticSearchVersion" value="5.2.0" />
+            <cm:property name="maximalElasticSearchVersion" value="5.3.0" />
 
         </cm:default-properties>
     </cm:property-placeholder>

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/53fb16ea/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
----------------------------------------------------------------------
diff --git 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
index b1aa234..26e480a 100644
--- 
a/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
+++ 
b/plugins/baseplugin/src/main/java/org/apache/unomi/plugins/baseplugin/conditions/PropertyConditionESQueryBuilder.java
@@ -26,13 +26,20 @@ import org.elasticsearch.index.query.BoolQueryBuilder;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.joda.time.DateTime;
+import org.joda.time.format.DateTimeFormatter;
+import org.joda.time.format.ISODateTimeFormat;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
 public class PropertyConditionESQueryBuilder implements 
ConditionESQueryBuilder {
 
+    DateTimeFormatter dateTimeFormatter;
+
     public PropertyConditionESQueryBuilder() {
+        dateTimeFormatter = ISODateTimeFormat.dateTime();
     }
 
     @Override
@@ -46,12 +53,12 @@ public class PropertyConditionESQueryBuilder implements 
ConditionESQueryBuilder
 
         String expectedValue = ConditionContextHelper.foldToASCII((String) 
condition.getParameter("propertyValue"));
         Object expectedValueInteger = 
condition.getParameter("propertyValueInteger");
-        Object expectedValueDate = condition.getParameter("propertyValueDate");
+        Object expectedValueDate = 
convertDateToISO(condition.getParameter("propertyValueDate"));
         Object expectedValueDateExpr = 
condition.getParameter("propertyValueDateExpr");
 
         List<?> expectedValues = ConditionContextHelper.foldToASCII((List<?>) 
condition.getParameter("propertyValues"));
         List<?> expectedValuesInteger = (List<?>) 
condition.getParameter("propertyValuesInteger");
-        List<?> expectedValuesDate = (List<?>) 
condition.getParameter("propertyValuesDate");
+        List<?> expectedValuesDate = convertDatesToISO((List<?>) 
condition.getParameter("propertyValuesDate"));
         List<?> expectedValuesDateExpr = (List<?>) 
condition.getParameter("propertyValuesDateExpr");
 
         Object value = ObjectUtils.firstNonNull(expectedValue, 
expectedValueInteger, expectedValueDate, expectedValueDateExpr);
@@ -161,4 +168,28 @@ public class PropertyConditionESQueryBuilder implements 
ConditionESQueryBuilder
         DateTime dayAfterStart = date.plusDays(1).withTimeAtStartOfDay();
         return 
QueryBuilders.rangeQuery(name).gte(dayStart.toDate()).lte(dayAfterStart.toDate());
     }
+
+    private Object convertDateToISO(Object dateValue) {
+        if (dateValue == null) {
+            return dateValue;
+        }
+        if (dateValue instanceof Date) {
+            return dateTimeFormatter.print(new DateTime(dateValue));
+        } else {
+            return dateValue;
+        }
+    }
+
+    private List<?> convertDatesToISO(List<?> datesValues) {
+        List<Object> results = new ArrayList<>();
+        if (datesValues == null) {
+            return null;
+        }
+        for (Object dateValue : datesValues) {
+            if (dateValue != null) {
+                results.add(convertDateToISO(dateValue));
+            }
+        }
+        return results;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/53fb16ea/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 18bc4c1..376cf21 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,7 +69,7 @@
         <version.jackson.jaxb>2.6.6</version.jackson.jaxb> <!-- version used 
by CXF -->
         <version.karaf>3.0.8</version.karaf>
         <version.karaf.cellar>3.0.3</version.karaf.cellar>
-        <version.pax.exam>4.9.1</version.pax.exam>
+        <version.pax.exam>4.11.0</version.pax.exam>
         <elasticsearch.version>5.2.2</elasticsearch.version>
 
         <maven.compiler.source>1.7</maven.compiler.source>
@@ -904,12 +904,14 @@
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
-                    <version>2.19.1</version>
+                    <!-- Version more recent than 2.18.1 don't seem to work ! 
-->
+                    <version>2.18.1</version>
                 </plugin>
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-failsafe-plugin</artifactId>
-                    <version>2.19.1</version>
+                    <!-- Version more recent than 2.18.1 don't seem to work ! 
-->
+                    <version>2.18.1</version>
                 </plugin>
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>

http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/53fb16ea/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
 
b/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
index 4055080..b7f1594 100644
--- 
a/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
+++ 
b/services/src/main/java/org/apache/unomi/services/services/ClusterServiceImpl.java
@@ -38,6 +38,7 @@ import java.io.IOException;
 import java.lang.management.ManagementFactory;
 import java.lang.management.OperatingSystemMXBean;
 import java.lang.management.RuntimeMXBean;
+import java.net.ConnectException;
 import java.net.MalformedURLException;
 import java.util.*;
 
@@ -232,8 +233,8 @@ public class ClusterServiceImpl implements ClusterService {
                 clusterNode.setInternalHostAddress(internalEndpointParts[0]);
                 
clusterNode.setInternalPort(Integer.parseInt(internalEndpointParts[1]));
             }
+            String serviceUrl = 
"service:jmx:rmi:///jndi/rmi://"+karafCellarNode.getHost() + 
":"+karafJMXPort+"/karaf-root";
             try {
-                String serviceUrl = 
"service:jmx:rmi:///jndi/rmi://"+karafCellarNode.getHost() + 
":"+karafJMXPort+"/karaf-root";
                 JMXConnector jmxConnector = getJMXConnector(serviceUrl);
                 MBeanServerConnection mbsc = 
jmxConnector.getMBeanServerConnection();
                 final RuntimeMXBean remoteRuntime = 
ManagementFactory.newPlatformMXBeanProxy(mbsc, 
ManagementFactory.RUNTIME_MXBEAN_NAME, RuntimeMXBean.class);
@@ -255,6 +256,20 @@ public class ClusterServiceImpl implements ClusterService {
 
             } catch (MalformedURLException e) {
                 logger.error("Error connecting to remote JMX server", e);
+            } catch (ConnectException ce) {
+                if (ce.getMessage() != null && ce.getMessage().contains("timed 
out")) {
+                    logger.warn("RMI Connection timed out, will reconnect on 
next request.");
+                    JMXConnector jmxConnector = 
jmxConnectors.remove(serviceUrl);
+                    try {
+                        if (jmxConnector != null) {
+                            jmxConnector.close();
+                        }
+                    } catch (Throwable t) {
+                        // ignore any exception when closing a timed out 
connection.
+                    }
+                } else {
+                    logger.error("Error retrieving remote JMX data", ce);
+                }
             } catch (IOException e) {
                 logger.error("Error retrieving remote JMX data", e);
             } catch (MalformedObjectNameException e) {

Reply via email to