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: