This is an automated email from the ASF dual-hosted git repository.

olli pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-karaf-integration-tests.git


The following commit(s) were added to refs/heads/master by this push:
     new 8428f0a  SLING-3017 Improve Karaf integration tests
8428f0a is described below

commit 8428f0ad80bc240d55e9e23a7a59df8d01698479
Author: Oliver Lietz <[email protected]>
AuthorDate: Thu Apr 23 19:26:16 2020 +0200

    SLING-3017 Improve Karaf integration tests
    
    use Testcontainers to run mongod
---
 pom.xml                                            | 38 +++------------
 .../tests/bootstrap/SlingQuickstartOakMongoIT.java | 55 +++++++++++-----------
 .../karaf/tests/support/MongodProcessStopper.java  | 46 ------------------
 3 files changed, 33 insertions(+), 106 deletions(-)

diff --git a/pom.xml b/pom.xml
index 01dc88b..2e7952c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -155,36 +155,16 @@
         </exclusion>
       </exclusions>
     </dependency>
-    <!-- MongoDB -->
     <dependency>
-      <!-- zombie processes like 
extract-fd770c28-8fb5-4092-87d5-4100c18a8f32extractmongod with versions greater 
2.0.0 use 100% CPU -->
-      <groupId>de.flapdoodle.embed</groupId>
-      <artifactId>de.flapdoodle.embed.mongo</artifactId>
-      <version>1.50.5</version>
+      <groupId>org.testcontainers</groupId>
+      <artifactId>testcontainers</artifactId>
+      <version>1.14.0</version>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>de.flapdoodle.embed</groupId>
-      <artifactId>de.flapdoodle.embed.process</artifactId>
-      <version>1.50.2</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>net.java.dev.jna</groupId>
-      <artifactId>jna</artifactId>
-      <version>5.2.0</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>net.java.dev.jna</groupId>
-      <artifactId>jna-platform</artifactId>
-      <version>5.2.0</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-compress</artifactId>
-      <version>1.18</version>
+      <groupId>org.rnorth.duct-tape</groupId>
+      <artifactId>duct-tape</artifactId>
+      <version>1.0.8</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
@@ -226,12 +206,6 @@
             </executions>
             <configuration>
               <redirectTestOutputToFile>true</redirectTestOutputToFile>
-              <properties>
-                <property>
-                  <name>listener</name>
-                  
<value>org.apache.sling.karaf.tests.support.MongodProcessStopper</value>
-                </property>
-              </properties>
             </configuration>
           </plugin>
         </plugins>
diff --git 
a/src/test/java/org/apache/sling/karaf/tests/bootstrap/SlingQuickstartOakMongoIT.java
 
b/src/test/java/org/apache/sling/karaf/tests/bootstrap/SlingQuickstartOakMongoIT.java
index 64f2a7f..8ab92dd 100644
--- 
a/src/test/java/org/apache/sling/karaf/tests/bootstrap/SlingQuickstartOakMongoIT.java
+++ 
b/src/test/java/org/apache/sling/karaf/tests/bootstrap/SlingQuickstartOakMongoIT.java
@@ -18,59 +18,58 @@
  */
 package org.apache.sling.karaf.tests.bootstrap;
 
-import java.io.IOException;
+import java.time.Duration;
 
-import de.flapdoodle.embed.mongo.MongodExecutable;
-import de.flapdoodle.embed.mongo.MongodProcess;
-import de.flapdoodle.embed.mongo.MongodStarter;
-import de.flapdoodle.embed.mongo.config.IMongodConfig;
-import de.flapdoodle.embed.mongo.config.MongodConfigBuilder;
-import de.flapdoodle.embed.mongo.config.Net;
-import de.flapdoodle.embed.mongo.distribution.Version;
-import de.flapdoodle.embed.process.runtime.Network;
-import org.apache.sling.karaf.tests.support.MongodProcessStopper;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.OptionUtils;
 import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.options.WrappedUrlProvisionOption;
 import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
 import org.ops4j.pax.exam.spi.reactors.PerClass;
 import org.osgi.framework.Bundle;
+import org.testcontainers.containers.GenericContainer;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.wrappedBundle;
 import static 
org.ops4j.pax.exam.karaf.options.KarafDistributionOption.editConfigurationFilePut;
 
 @RunWith(PaxExam.class)
 @ExamReactorStrategy(PerClass.class)
 public class SlingQuickstartOakMongoIT extends 
AbstractSlingQuickstartOakTestSupport {
 
-    protected void startMongo(final int port) throws IOException {
-        final MongodStarter starter = MongodStarter.getDefaultInstance();
-        final Net net = new Net(port, Network.localhostIsIPv6());
-        final IMongodConfig mongodConfig = new 
MongodConfigBuilder().version(Version.Main.PRODUCTION).net(net).build();
-        final MongodExecutable executable = starter.prepare(mongodConfig);
-        final MongodProcess process = executable.start();
-        MongodProcessStopper.add(process);
-    }
+    private static GenericContainer mongoContainer;
+
+    private static final String MONGO_CONTAINER_IMAGE_NAME = "mongo";
 
     @Configuration
-    public Option[] configuration() throws IOException {
-        final int port = Network.getFreeServerPort();
-        startMongo(port);
-        final String mongoUri = String.format("mongodb://localhost:%s", port);
+    public Option[] configuration() {
+        final boolean testcontainer = 
Boolean.parseBoolean(System.getProperty("mongod.testcontainer", "true"));
+        final String host;
+        final Integer port;
+        if (testcontainer) {
+            mongoContainer = new GenericContainer<>(MONGO_CONTAINER_IMAGE_NAME)
+                .withExposedPorts(27017)
+                .withStartupTimeout(Duration.ofMinutes(5));
+            mongoContainer.start();
+            host = mongoContainer.getContainerIpAddress();
+            port = mongoContainer.getFirstMappedPort();
+        } else {
+            host = System.getProperty("mongod.host", "localhost");
+            port = Integer.parseInt(System.getProperty("mongod.port", 
"27017"));
+        }
+
+        final String mongoUri = String.format("mongodb://%s:%s", host, port);
         return OptionUtils.combine(baseConfiguration(),
             editConfigurationFilePut("etc/org.apache.karaf.features.cfg", 
"featuresBoot", "(wrap)"),
             
editConfigurationFilePut("etc/org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreService.config",
 "mongouri", mongoUri),
-            
mavenBundle().groupId("de.flapdoodle.embed").artifactId("de.flapdoodle.embed.mongo").versionAsInProject(),
-            
mavenBundle().groupId("de.flapdoodle.embed").artifactId("de.flapdoodle.embed.process").versionAsInProject(),
-            
mavenBundle().groupId("net.java.dev.jna").artifactId("jna").versionAsInProject(),
-            
mavenBundle().groupId("net.java.dev.jna").artifactId("jna-platform").versionAsInProject(),
-            
mavenBundle().groupId("org.apache.commons").artifactId("commons-compress").versionAsInProject(),
-            addSlingFeatures("sling-quickstart-oak-mongo")
+            addSlingFeatures("sling-quickstart-oak-mongo"),
+            
wrappedBundle(mavenBundle().groupId("org.rnorth.duct-tape").artifactId("duct-tape").versionAsInProject()),
+            
wrappedBundle(mavenBundle().groupId("org.testcontainers").artifactId("testcontainers").versionAsInProject()).imports("org.junit.rules").overwriteManifest(WrappedUrlProvisionOption.OverwriteMode.MERGE)
         );
     }
 
diff --git 
a/src/test/java/org/apache/sling/karaf/tests/support/MongodProcessStopper.java 
b/src/test/java/org/apache/sling/karaf/tests/support/MongodProcessStopper.java
deleted file mode 100644
index e29841a..0000000
--- 
a/src/test/java/org/apache/sling/karaf/tests/support/MongodProcessStopper.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * 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.
- */
-package org.apache.sling.karaf.tests.support;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import de.flapdoodle.embed.mongo.MongodProcess;
-import org.junit.runner.Result;
-import org.junit.runner.notification.RunListener;
-
-public class MongodProcessStopper extends RunListener {
-
-    private static Set<MongodProcess> processes = new HashSet<>();
-
-    public MongodProcessStopper() {
-    }
-
-    public static void add(final MongodProcess process) {
-        processes.add(process);
-    }
-
-    @Override
-    public void testRunFinished(Result result) {
-        for (final MongodProcess process : processes) {
-            process.stop();
-        }
-    }
-
-}

Reply via email to