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) {