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();
- }
- }
-
-}