You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2021/07/26 11:01:30 UTC
[camel-quarkus] branch main updated: [Camel 3.11] Solr cloud
integration tests are failing #2814
This is an automated email from the ASF dual-hosted git repository.
ppalaga pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push:
new de8032b [Camel 3.11] Solr cloud integration tests are failing #2814
de8032b is described below
commit de8032b558ee22ce4af27c5e098e48081c7bd00a
Author: JiriOndrusek <on...@gmail.com>
AuthorDate: Fri Jul 23 13:32:00 2021 +0200
[Camel 3.11] Solr cloud integration tests are failing #2814
---
.../component/solr/deployment/SolrProcessor.java | 3 ++
.../component/solr/it/SolrCloudResource.java | 5 +-
.../camel/quarkus/component/solr/it/SolrTest.java | 3 +-
.../component/solr/it/SolrTestResource.java | 57 +++++++++++-----------
.../src/test/resources/cloud-docker-compose.yml | 54 ++++++++++++++++++++
5 files changed, 90 insertions(+), 32 deletions(-)
diff --git a/extensions/solr/deployment/src/main/java/org/apache/camel/quarkus/component/solr/deployment/SolrProcessor.java b/extensions/solr/deployment/src/main/java/org/apache/camel/quarkus/component/solr/deployment/SolrProcessor.java
index 212d4b3..11e07a6 100644
--- a/extensions/solr/deployment/src/main/java/org/apache/camel/quarkus/component/solr/deployment/SolrProcessor.java
+++ b/extensions/solr/deployment/src/main/java/org/apache/camel/quarkus/component/solr/deployment/SolrProcessor.java
@@ -25,6 +25,7 @@ import io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem;
+import org.apache.zookeeper.ClientCnxnSocketNIO;
import org.jboss.jandex.AnnotationTarget;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;
@@ -65,6 +66,8 @@ class SolrProcessor {
}
})
.forEach(reflectiveClass::produce);
+
+ reflectiveClass.produce(new ReflectiveClassBuildItem(false, false, ClientCnxnSocketNIO.class.getName()));
}
@BuildStep
diff --git a/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/SolrCloudResource.java b/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/SolrCloudResource.java
index 4509ab0..0b95d3c 100644
--- a/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/SolrCloudResource.java
+++ b/integration-tests/solr/src/main/java/org/apache/camel/quarkus/component/solr/it/SolrCloudResource.java
@@ -33,11 +33,14 @@ import org.eclipse.microprofile.config.inject.ConfigProperty;
@Produces(MediaType.APPLICATION_JSON)
public class SolrCloudResource extends SolrCommonResource {
+ @ConfigProperty(name = "solr.cloud.component.url", defaultValue = "localhost:8981/solr?zkHost=localhost:1281&collection=collection1&username=solr&password=SolrRocks")
+ String solrComponentUrl;
+
@ConfigProperty(name = "solr.cloud.url", defaultValue = "localhost:8981/solr/collection1")
String solrUrl;
public void init(@Observes StartupEvent startupEvent) {
- solrComponentURI = String.format("solrCloud://%s", solrUrl);
+ solrComponentURI = String.format("solrCloud://%s", solrComponentUrl);
solrClient = new HttpSolrClient.Builder(String.format("http://%s", solrUrl)).build();
}
}
diff --git a/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java b/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java
index 7481e78..e317ac1 100644
--- a/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java
+++ b/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTest.java
@@ -42,8 +42,7 @@ public class SolrTest {
* @return
*/
private static Stream<String> resources() {
- // TODO: Reactivate cloud tests - https://github.com/apache/camel-quarkus/issues/2814
- return Stream.of("/solr/standalone", "/solr/ssl"); //, "/solr/cloud");
+ return Stream.of("/solr/standalone", "/solr/ssl", "/solr/cloud");
}
@ParameterizedTest
diff --git a/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTestResource.java b/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTestResource.java
index d8be11f..e7e6ee1 100644
--- a/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTestResource.java
+++ b/integration-tests/solr/src/test/java/org/apache/camel/quarkus/component/solr/it/SolrTestResource.java
@@ -16,16 +16,19 @@
*/
package org.apache.camel.quarkus.component.solr.it;
+import java.io.File;
import java.util.Map;
-import com.github.dockerjava.api.command.InspectContainerResponse;
import io.quarkus.test.common.QuarkusTestResourceLifecycleManager;
import org.apache.camel.util.CollectionHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.BindMode;
+import org.testcontainers.containers.DockerComposeContainer;
+import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.SolrContainer;
import org.testcontainers.containers.output.Slf4jLogConsumer;
+import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.utility.DockerImageName;
public class SolrTestResource implements QuarkusTestResourceLifecycleManager {
@@ -35,21 +38,27 @@ public class SolrTestResource implements QuarkusTestResourceLifecycleManager {
private static final DockerImageName SOLR_IMAGE = DockerImageName.parse("solr:8.7.0");
private static final String COLLECTION_NAME = "collection1";
private static final String URL_FORMAT = "localhost:%s/solr/collection1";
+ private static final String CLOUD_COMPONENT_URL_FORMAT = "localhost:%s/solr?zkHost=localhost:%s&collection=collection1&username=solr&password=SolrRocks";
+ private static final int ZOOKEEPER_PORT = 2181;
+ private static final int SOLR_PORT = 8983;
private SolrContainer standaloneContainer;
private SolrContainer sslContainer;
- private SolrContainer cloudContainer;
+ private DockerComposeContainer cloudContainer;
@Override
public Map<String, String> start() {
// creates 3 containers for 3 different modes of using SOLR
createContainers();
// start containers
- startContainers(standaloneContainer, sslContainer, cloudContainer);
+ startContainers(cloudContainer, standaloneContainer, sslContainer);
// return custom URLs
return CollectionHelper.mapOf("solr.standalone.url", String.format(URL_FORMAT, standaloneContainer.getSolrPort()),
"solr.ssl.url", String.format(URL_FORMAT, sslContainer.getSolrPort()),
- "solr.cloud.url", String.format(URL_FORMAT, cloudContainer.getSolrPort()));
+ "solr.cloud.url", String.format(URL_FORMAT, cloudContainer.getServicePort("solr1", SOLR_PORT)),
+ "solr.cloud.component.url", String.format(CLOUD_COMPONENT_URL_FORMAT,
+ cloudContainer.getServicePort("solr1", SOLR_PORT),
+ cloudContainer.getServicePort("zoo1", ZOOKEEPER_PORT)));
}
private void createContainers() {
@@ -58,10 +67,12 @@ public class SolrTestResource implements QuarkusTestResourceLifecycleManager {
createCloudContainer();
}
- private void startContainers(SolrContainer... containers) {
- for (SolrContainer container : containers) {
+ private void startContainers(DockerComposeContainer dc, GenericContainer... containers) {
+ for (GenericContainer container : containers) {
container.start();
}
+
+ dc.start();
}
/**
@@ -100,38 +111,26 @@ public class SolrTestResource implements QuarkusTestResourceLifecycleManager {
* creates a cloud container with zookeeper
*/
private void createCloudContainer() {
- cloudContainer = new SolrContainer(SOLR_IMAGE) {
- @Override
- protected void containerIsStarted(InspectContainerResponse containerInfo) {
- // Retry container setup steps in case of failure
- int maxRetries = 10;
- int attempts = 1;
- do {
- try {
- super.containerIsStarted(containerInfo);
- break;
- } catch (Exception e) {
- LOGGER.info("Retrying containerIsStarted due to exception: {}", e.getMessage());
- attempts++;
- }
- } while (attempts <= maxRetries);
- }
- }
- .withZookeeper(true)
- .withCollection(COLLECTION_NAME)
- .withLogConsumer(new Slf4jLogConsumer(LOGGER));
+ cloudContainer = new DockerComposeContainer(new File("src/test/resources/cloud-docker-compose.yml"))
+ .withExposedService("solr1", SOLR_PORT)
+ .withExposedService("zoo1", ZOOKEEPER_PORT)
+ .waitingFor("create-collection", Wait.forLogMessage(".*Created collection 'collection1'.*", 1));
}
@Override
public void stop() {
- stopContainers(standaloneContainer, sslContainer, cloudContainer);
+ stopContainers(cloudContainer, standaloneContainer, sslContainer);
}
- private void stopContainers(SolrContainer... containers) {
- for (SolrContainer container : containers) {
+ private void stopContainers(DockerComposeContainer dc, GenericContainer... containers) {
+ for (GenericContainer container : containers) {
if (container != null) {
container.stop();
}
}
+
+ if (dc != null) {
+ dc.stop();
+ }
}
}
diff --git a/integration-tests/solr/src/test/resources/cloud-docker-compose.yml b/integration-tests/solr/src/test/resources/cloud-docker-compose.yml
new file mode 100644
index 0000000..e5d8203
--- /dev/null
+++ b/integration-tests/solr/src/test/resources/cloud-docker-compose.yml
@@ -0,0 +1,54 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# based on https://raw.githubusercontent.com/docker-solr/docker-solr-examples/master/docker-compose/docker-compose.yml
+version: '3.7'
+services:
+ solr1:
+ image: solr:8.7.0
+ environment:
+ - ZK_HOST=zoo1:2181
+ networks:
+ - solr
+ depends_on:
+ - zoo1
+
+ zoo1:
+ image: zookeeper:3.6.2
+ restart: always
+ hostname: zoo1
+ environment:
+ ZOO_MY_ID: 1
+ ZOO_SERVERS: server.1=zoo1:2888:3888;2181
+ networks:
+ - solr
+
+ create-collection:
+ image: solr:8.7.0
+ environment:
+ - SOLR_HOST=solr1
+ networks:
+ - solr
+ command:
+ - bash
+ - "-e"
+ - "-x"
+ - "-c"
+ - "wait-for-solr.sh --max-attempts 10 --wait-seconds 5 --solr-url http://$$SOLR_HOST:8983/; solr create_collection -c collection1 -p 8983"
+
+networks:
+ solr: