From 9cede698fd561722d597af369636c148a5004387 Mon Sep 17 00:00:00 2001
From: "Piotr P. Karwasz"
Date: Fri, 6 Sep 2024 08:53:43 +0200
Subject: [PATCH] Switch MongoDB tests to use Docker
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
MongoDB is a binary server. The current `log4j-mongodb`
tests download a **generic** binary MongoDB distribution
and try to run it. The distribution is not self-contained
and requires several libraries (e.g., OpenSSL) to be available
on the target host.
Those libraries are not always available in the required version:
e.g., currently MongoDB needs OpenSSL 1, but OpenSSL 3 is bundled
in the most recent Debian.
This PR switches from the binary distribution to the usage of
the **latest** Docker image available.
The advantages of this approach are:
- We always test against the newest server version available.
- The success of the tests does not depend on the libraries
installed on the host.
- Tests can run in parallel. In the current approach, parallel
tests failed since each one tried to download MongoDB
separately.
The main disadvantage is that Docker will be required to test
`log4j-mongodb`. This is the case for the CI, but individual
developers might need to install it too.
Co-authored-by: Volkan Yazıcı
---
BUILDING.adoc | 7 +
.../log4j/core/impl/CoreDefaultBundle.java | 6 +-
log4j-mongodb/pom.xml | 162 ++++++++++++++++--
...Test.java => AbstractMongoDbCappedIT.java} | 11 +-
...st.java => MongoDbAdditionalFieldsIT.java} | 14 +-
...ureTest.java => MongoDbAuthFailureIT.java} | 15 +-
...dLongTest.java => MongoDbCappedIntIT.java} | 16 +-
...dIntTest.java => MongoDbCappedLongIT.java} | 16 +-
.../{MongoDbTest.java => MongoDbIT.java} | 14 +-
...sageTest.java => MongoDbMapMessageIT.java} | 14 +-
.../log4j/mongodb/MongoDbResolver.java | 133 +-------------
...solverTest.java => MongoDbResolverIT.java} | 7 +-
.../log4j/mongodb/MongoDbTestConstants.java | 3 +-
.../resources/MongoDbAdditionalFields.xml | 37 ++++
...h-failure.xml => MongoDbAuthFailureIT.xml} | 12 +-
...-capped-int.xml => MongoDbCappedIntIT.xml} | 12 +-
...apped-long.xml => MongoDbCappedLongIT.xml} | 12 +-
...db-additional-fields.xml => MongoDbIT.xml} | 16 +-
...ap-message.xml => MongoDbMapMessageIT.xml} | 12 +-
.../src/test/resources/log4j2-mongodb.xml | 29 ----
log4j-parent/pom.xml | 45 +----
pom.xml | 2 +
src/changelog/.3.x.x/2229_mongodb_docker.xml | 8 +
23 files changed, 331 insertions(+), 272 deletions(-)
rename log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/{AbstractMongoDbCappedTest.java => AbstractMongoDbCappedIT.java} (84%)
rename log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/{MongoDbAdditionalFieldsTest.java => MongoDbAdditionalFieldsIT.java} (88%)
rename log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/{MongoDbAuthFailureTest.java => MongoDbAuthFailureIT.java} (77%)
rename log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/{MongoDbCappedLongTest.java => MongoDbCappedIntIT.java} (64%)
rename log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/{MongoDbCappedIntTest.java => MongoDbCappedLongIT.java} (64%)
rename log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/{MongoDbTest.java => MongoDbIT.java} (84%)
rename log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/{MongoDbMapMessageTest.java => MongoDbMapMessageIT.java} (81%)
rename log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/{MongoDbResolverTest.java => MongoDbResolverIT.java} (86%)
create mode 100644 log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml
rename log4j-mongodb/src/test/resources/{log4j2-mongodb-auth-failure.xml => MongoDbAuthFailureIT.xml} (67%)
rename log4j-mongodb/src/test/resources/{log4j2-mongodb-capped-int.xml => MongoDbCappedIntIT.xml} (70%)
rename log4j-mongodb/src/test/resources/{log4j2-mongodb-capped-long.xml => MongoDbCappedLongIT.xml} (71%)
rename log4j-mongodb/src/test/resources/{log4j2-mongodb-additional-fields.xml => MongoDbIT.xml} (68%)
rename log4j-mongodb/src/test/resources/{log4j2-mongodb-map-message.xml => MongoDbMapMessageIT.xml} (68%)
delete mode 100644 log4j-mongodb/src/test/resources/log4j2-mongodb.xml
create mode 100644 src/changelog/.3.x.x/2229_mongodb_docker.xml
diff --git a/BUILDING.adoc b/BUILDING.adoc
index edb19b1e40b..d6257b2b85b 100644
--- a/BUILDING.adoc
+++ b/BUILDING.adoc
@@ -52,6 +52,13 @@ To remedy this, you can execute the following:
printf '127.0.0.1 %s\n::1 %s\n' `hostname` `hostname` | sudo tee -a /etc/hosts
----
+[#docker]
+=== Docker tests
+
+Certain tests use Docker to spawn necessary external services.
+Docker tests are configured using the `docker` Maven profile, which is activated by default for the CI environment.
+You can locally enable this profile by passing a `-P docker` argument to your `./mvnw` commands.
+
[#website]
== Building the website
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/CoreDefaultBundle.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/CoreDefaultBundle.java
index 66598fc776c..9b686e6a956 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/CoreDefaultBundle.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/CoreDefaultBundle.java
@@ -238,8 +238,10 @@ public MergeStrategy defaultMergeStrategy() {
@SingletonFactory
@Named("StatusLogger")
@ConditionalOnMissingBinding
- public Level defaultStatusLevel() {
- return Level.ERROR;
+ public Level defaultStatusLevel(PropertyEnvironment environment) {
+ return environment
+ .getProperty(CoreProperties.StatusLoggerProperties.class)
+ .level();
}
@SingletonFactory
diff --git a/log4j-mongodb/pom.xml b/log4j-mongodb/pom.xml
index 3ccd7f9df7c..b2c62370664 100644
--- a/log4j-mongodb/pom.xml
+++ b/log4j-mongodb/pom.xml
@@ -35,29 +35,63 @@
~ OSGi and JPMS options
-->
org.apache.logging.log4j.core
+
+
+ 5.1.3
+ 2.0.15
+
+
+
+
+ org.mongodb
+ bson
+ ${mongodb.version}
+
+
+
+ org.mongodb
+ mongodb-driver-core
+ ${mongodb.version}
+
+
+
+ org.mongodb
+ mongodb-driver-sync
+ ${mongodb.version}
+
+
+
+
+
+
org.apache.logging.log4j
log4j-api
+
org.apache.logging.log4j
log4j-core
+
org.mongodb
bson
+
org.mongodb
mongodb-driver-core
+
org.mongodb
mongodb-driver-sync
+
org.apache.logging.log4j
log4j-api-test
@@ -69,6 +103,7 @@
+
org.apache.logging.log4j
log4j-core-test
@@ -88,31 +123,19 @@
+
org.apache.commons
commons-lang3
test
-
- de.flapdoodle.embed
- de.flapdoodle.embed.mongo
- test
-
-
- de.flapdoodle.embed
- de.flapdoodle.embed.process
- test
-
-
- de.flapdoodle.reverse
- de.flapdoodle.reverse
- test
-
+
org.junit.jupiter
junit-jupiter-api
test
+
@@ -122,8 +145,7 @@
org.apache.maven.plugins
maven-surefire-plugin
-
- 1
+ true
@@ -142,4 +164,110 @@
+
+
+
+ docker
+
+
+
+
+ linux
+
+
+ env.CI
+ true
+
+
+
+
+
+
+
+ io.fabric8
+ docker-maven-plugin
+
+ all
+ true
+ true
+
+
+ mongo
+ mongo:latest
+
+
+
+ localhost:mongo.port:27017
+
+
+
+
+
+
+
+ start-mongo
+
+ start
+
+
+
+ stop-mongo
+
+ stop
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit-jupiter.version}
+
+
+ org.slf4j
+ slf4j-nop
+ ${slf4j2.version}
+
+
+
+
+
+ integration-test
+ verify
+
+
+ true
+
+ **/*IT.java
+
+
+
+ OFF
+
+ ${mongo.port}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/AbstractMongoDbCappedTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/AbstractMongoDbCappedIT.java
similarity index 84%
rename from log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/AbstractMongoDbCappedTest.java
rename to log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/AbstractMongoDbCappedIT.java
index 07e39339941..56cf3a89bee 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/AbstractMongoDbCappedTest.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/AbstractMongoDbCappedIT.java
@@ -23,17 +23,16 @@
import org.apache.logging.log4j.core.LoggerContext;
import org.bson.Document;
import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-public abstract class AbstractMongoDbCappedTest {
+abstract class AbstractMongoDbCappedIT {
- @Test
- public void test(final LoggerContext ctx, final MongoClient mongoClient) {
- final Logger logger = ctx.getLogger(AbstractMongoDbCappedTest.class);
+ protected void test(final LoggerContext ctx, final MongoClient mongoClient) {
+ final Logger logger = ctx.getLogger(AbstractMongoDbCappedIT.class);
logger.info("Hello log");
final MongoDatabase database = mongoClient.getDatabase(MongoDbTestConstants.DATABASE_NAME);
Assertions.assertNotNull(database);
- final MongoCollection collection = database.getCollection(MongoDbTestConstants.COLLECTION_NAME);
+ final MongoCollection collection =
+ database.getCollection(getClass().getSimpleName());
Assertions.assertNotNull(collection);
final Document first = collection.find().first();
Assertions.assertNotNull(first);
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAdditionalFieldsTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAdditionalFieldsIT.java
similarity index 88%
rename from log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAdditionalFieldsTest.java
rename to log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAdditionalFieldsIT.java
index c74172925f5..f63ecf4ecfd 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAdditionalFieldsTest.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAdditionalFieldsIT.java
@@ -26,21 +26,25 @@
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
import org.bson.Document;
import org.junit.jupiter.api.Test;
@UsingMongoDb
-@LoggerContextSource("log4j2-mongodb-additional-fields.xml")
-public class MongoDbAdditionalFieldsTest {
+@LoggerContextSource("MongoDbAdditionalFields.xml")
+// Print debug status logger output upon failure
+@UsingStatusListener
+class MongoDbAdditionalFieldsIT {
@Test
- public void test(final LoggerContext ctx, final MongoClient mongoClient) {
- final Logger logger = ctx.getLogger(MongoDbAdditionalFieldsTest.class);
+ void test(final LoggerContext ctx, final MongoClient mongoClient) {
+ final Logger logger = ctx.getLogger(MongoDbAdditionalFieldsIT.class);
logger.info("Hello log 1");
logger.info("Hello log 2", new RuntimeException("Hello ex 2"));
final MongoDatabase database = mongoClient.getDatabase(MongoDbTestConstants.DATABASE_NAME);
assertNotNull(database);
- final MongoCollection collection = database.getCollection(MongoDbTestConstants.COLLECTION_NAME);
+ final MongoCollection collection =
+ database.getCollection(getClass().getSimpleName());
assertNotNull(collection);
final FindIterable found = collection.find();
final Document first = found.first();
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAuthFailureTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAuthFailureIT.java
similarity index 77%
rename from log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAuthFailureTest.java
rename to log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAuthFailureIT.java
index 3247dc28c06..5a44aa5456e 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAuthFailureTest.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAuthFailureIT.java
@@ -25,20 +25,25 @@
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
import org.bson.Document;
import org.junit.jupiter.api.Test;
@UsingMongoDb
-@LoggerContextSource("log4j2-mongodb-auth-failure.xml")
-public class MongoDbAuthFailureTest {
+@LoggerContextSource("MongoDbAuthFailureIT.xml")
+// Print debug status logger output upon failure
+@UsingStatusListener
+class MongoDbAuthFailureIT {
@Test
- public void test(final LoggerContext ctx, final MongoClient mongoClient) {
- final Logger logger = ctx.getLogger(MongoDbAuthFailureTest.class);
+ void test(final LoggerContext ctx, final MongoClient mongoClient) {
+ final Logger logger = ctx.getLogger(MongoDbAuthFailureIT.class);
logger.info("Hello log");
final MongoDatabase database = mongoClient.getDatabase(MongoDbTestConstants.DATABASE_NAME);
assertNotNull(database);
- final MongoCollection collection = database.getCollection(MongoDbTestConstants.DATABASE_NAME);
+ final MongoCollection collection =
+ database.getCollection(getClass().getSimpleName());
+ ;
assertNotNull(collection);
final Document first = collection.find().first();
assertNull(first);
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedLongTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedIntIT.java
similarity index 64%
rename from log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedLongTest.java
rename to log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedIntIT.java
index 34f921fe7bf..887132ded40 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedLongTest.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedIntIT.java
@@ -16,11 +16,21 @@
*/
package org.apache.logging.log4j.mongodb;
+import com.mongodb.client.MongoClient;
+import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
+import org.junit.jupiter.api.Test;
@UsingMongoDb
-@LoggerContextSource("log4j2-mongodb-capped-long.xml")
-public class MongoDbCappedLongTest extends AbstractMongoDbCappedTest {
+@LoggerContextSource("MongoDbCappedIntIT.xml")
+// Print debug status logger output upon failure
+@UsingStatusListener
+class MongoDbCappedIntIT extends AbstractMongoDbCappedIT {
- // test is in superclass
+ @Test
+ @Override
+ protected void test(LoggerContext ctx, MongoClient mongoClient) {
+ super.test(ctx, mongoClient);
+ }
}
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedIntTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedLongIT.java
similarity index 64%
rename from log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedIntTest.java
rename to log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedLongIT.java
index 500964aff08..bb6b4e65722 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedIntTest.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedLongIT.java
@@ -16,11 +16,21 @@
*/
package org.apache.logging.log4j.mongodb;
+import com.mongodb.client.MongoClient;
+import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
+import org.junit.jupiter.api.Test;
@UsingMongoDb
-@LoggerContextSource("log4j2-mongodb-capped-int.xml")
-public class MongoDbCappedIntTest extends AbstractMongoDbCappedTest {
+@LoggerContextSource("MongoDbCappedLongIT.xml")
+// Print debug status logger output upon failure
+@UsingStatusListener
+class MongoDbCappedLongIT extends AbstractMongoDbCappedIT {
- // test is in superclass
+ @Test
+ @Override
+ protected void test(LoggerContext ctx, MongoClient mongoClient) {
+ super.test(ctx, mongoClient);
+ }
}
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbIT.java
similarity index 84%
rename from log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbTest.java
rename to log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbIT.java
index 5c4bbb750c1..d0f43cc70fd 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbTest.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbIT.java
@@ -26,21 +26,25 @@
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
import org.bson.Document;
import org.junit.jupiter.api.Test;
@UsingMongoDb
-@LoggerContextSource("log4j2-mongodb.xml")
-public class MongoDbTest {
+@LoggerContextSource("MongoDbIT.xml")
+// Print debug status logger output upon failure
+@UsingStatusListener
+class MongoDbIT {
@Test
- public void test(final LoggerContext ctx, final MongoClient mongoClient) {
- final Logger logger = ctx.getLogger(MongoDbTest.class);
+ void test(final LoggerContext ctx, final MongoClient mongoClient) {
+ final Logger logger = ctx.getLogger(MongoDbIT.class);
logger.info("Hello log 1");
logger.info("Hello log 2", new RuntimeException("Hello ex 2"));
final MongoDatabase database = mongoClient.getDatabase(MongoDbTestConstants.DATABASE_NAME);
assertNotNull(database);
- final MongoCollection collection = database.getCollection(MongoDbTestConstants.COLLECTION_NAME);
+ final MongoCollection collection =
+ database.getCollection(getClass().getSimpleName());
assertNotNull(collection);
final FindIterable found = collection.find();
final Document first = found.first();
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbMapMessageTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbMapMessageIT.java
similarity index 81%
rename from log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbMapMessageTest.java
rename to log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbMapMessageIT.java
index 2733554dbd3..b285529c0ce 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbMapMessageTest.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbMapMessageIT.java
@@ -23,24 +23,28 @@
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
import org.apache.logging.log4j.message.MapMessage;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
import org.bson.Document;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@UsingMongoDb
-@LoggerContextSource("log4j2-mongodb-map-message.xml")
-public class MongoDbMapMessageTest {
+@LoggerContextSource("MongoDbMapMessageIT.xml")
+// Print debug status logger output upon failure
+@UsingStatusListener
+class MongoDbMapMessageIT {
@Test
- public void test(final LoggerContext ctx, final MongoClient mongoClient) {
- final Logger logger = ctx.getLogger(MongoDbMapMessageTest.class);
+ void test(final LoggerContext ctx, final MongoClient mongoClient) {
+ final Logger logger = ctx.getLogger(MongoDbMapMessageIT.class);
final MapMessage, Object> mapMessage = new MapMessage<>();
mapMessage.with("SomeName", "SomeValue");
mapMessage.with("SomeInt", 1);
logger.info(mapMessage);
final MongoDatabase database = mongoClient.getDatabase(MongoDbTestConstants.DATABASE_NAME);
Assertions.assertNotNull(database);
- final MongoCollection collection = database.getCollection(MongoDbTestConstants.COLLECTION_NAME);
+ final MongoCollection collection =
+ database.getCollection(getClass().getSimpleName());
Assertions.assertNotNull(collection);
final Document first = collection.find().first();
Assertions.assertNotNull(first);
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbResolver.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbResolver.java
index 3fff459b74e..3c0888fc9d8 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbResolver.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbResolver.java
@@ -18,35 +18,9 @@
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
-import de.flapdoodle.embed.mongo.commands.ServerAddress;
-import de.flapdoodle.embed.mongo.distribution.Version;
-import de.flapdoodle.embed.mongo.packageresolver.Command;
-import de.flapdoodle.embed.mongo.transitions.Mongod;
-import de.flapdoodle.embed.mongo.transitions.PackageOfCommandDistribution;
-import de.flapdoodle.embed.mongo.transitions.RunningMongodProcess;
-import de.flapdoodle.embed.mongo.types.DistributionBaseUrl;
-import de.flapdoodle.embed.process.config.store.FileSet;
-import de.flapdoodle.embed.process.config.store.FileType;
-import de.flapdoodle.embed.process.config.store.Package;
-import de.flapdoodle.embed.process.distribution.Distribution;
-import de.flapdoodle.embed.process.io.ProcessOutput;
-import de.flapdoodle.embed.process.io.Processors;
-import de.flapdoodle.embed.process.io.StreamProcessor;
-import de.flapdoodle.embed.process.types.Name;
-import de.flapdoodle.embed.process.types.ProcessConfig;
-import de.flapdoodle.os.OSType;
-import de.flapdoodle.reverse.TransitionWalker.ReachedState;
-import de.flapdoodle.reverse.transitions.Derive;
-import de.flapdoodle.reverse.transitions.Start;
-import java.util.Objects;
import java.util.function.Supplier;
-import org.apache.commons.lang3.NotImplementedException;
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.status.StatusLogger;
-import org.apache.logging.log4j.test.TestProperties;
import org.apache.logging.log4j.test.junit.ExtensionContextAnchor;
-import org.apache.logging.log4j.test.junit.TestPropertySource;
+import org.apache.logging.log4j.util.PropertiesUtil;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.ExtensionContext.Store.CloseableResource;
@@ -54,68 +28,13 @@
import org.junit.jupiter.api.extension.ParameterResolutionException;
import org.junit.jupiter.api.extension.support.TypeBasedParameterResolver;
-public class MongoDbResolver extends TypeBasedParameterResolver implements BeforeAllCallback {
+class MongoDbResolver extends TypeBasedParameterResolver implements BeforeAllCallback {
- private static final Logger LOGGER = StatusLogger.getLogger();
- private static final String LOGGING_TARGET_PROPERTY = "log4j2.mongoDbLoggingTarget";
-
- private static final int BUILDER_TIMEOUT_MILLIS = 30000;
-
- private static ProcessOutput getProcessOutput(final LoggingTarget loggingTarget, final String label) {
- if (loggingTarget != null) {
- switch (loggingTarget) {
- case STATUS_LOGGER:
- return ProcessOutput.builder()
- .output(Processors.named(
- "[" + label + " output]", new StatusLoggerStreamProcessor(Level.INFO)))
- .error(Processors.named(
- "[" + label + " error]", new StatusLoggerStreamProcessor(Level.ERROR)))
- .commands(new StatusLoggerStreamProcessor(Level.DEBUG))
- .build();
- case CONSOLE:
- return ProcessOutput.namedConsole(label);
- default:
- }
- }
- throw new NotImplementedException(Objects.toString(loggingTarget));
- }
+ static final String PORT_PROPERTY = "log4j2.mongo.port";
@Override
public void beforeAll(ExtensionContext context) throws Exception {
- final TestProperties props = TestPropertySource.createProperties(context);
- final Mongod mongod = Mongod.builder()
- .processOutput(Derive.given(Name.class)
- .state(ProcessOutput.class)
- .deriveBy(name -> getProcessOutput(
- LoggingTarget.getLoggingTarget(LoggingTarget.STATUS_LOGGER), name.value())))
- .processConfig(Start.to(ProcessConfig.class)
- .initializedWith(ProcessConfig.defaults().withStopTimeoutInMillis(BUILDER_TIMEOUT_MILLIS))
- .withTransitionLabel("create default"))
- // workaround for https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo/issues/309
- .packageOfDistribution(new PackageOfCommandDistribution() {
-
- @Override
- protected Package packageOf(
- Command command, Distribution distribution, DistributionBaseUrl baseUrl) {
- if (distribution.platform().operatingSystem().type() == OSType.Windows) {
- final Package relativePackage =
- commandPackageResolver().apply(command).packageFor(distribution);
- final FileSet.Builder fileSetBuilder = FileSet.builder()
- .addEntry(FileType.Library, "ssleay32.dll")
- .addEntry(FileType.Library, "libeay32.dll");
- relativePackage.fileSet().entries().forEach(fileSetBuilder::addEntries);
- return Package.builder()
- .archiveType(relativePackage.archiveType())
- .fileSet(fileSetBuilder.build())
- .url(baseUrl.value() + relativePackage.url())
- .hint(relativePackage.hint())
- .build();
- }
- return super.packageOf(command, distribution, baseUrl);
- }
- })
- .build();
- ExtensionContextAnchor.setAttribute(MongoClientHolder.class, new MongoClientHolder(mongod, props), context);
+ ExtensionContextAnchor.setAttribute(MongoClientHolder.class, new MongoClientHolder(), context);
}
@Override
@@ -125,25 +44,13 @@ public MongoClient resolveParameter(ParameterContext parameterContext, Extension
.get();
}
- public enum LoggingTarget {
- CONSOLE,
- STATUS_LOGGER;
-
- public static LoggingTarget getLoggingTarget(final LoggingTarget defaultValue) {
- return LoggingTarget.valueOf(System.getProperty(LOGGING_TARGET_PROPERTY, defaultValue.name()));
- }
- }
-
private static final class MongoClientHolder implements CloseableResource, Supplier {
- private final ReachedState state;
private final MongoClient mongoClient;
- public MongoClientHolder(final Mongod mongod, final TestProperties props) {
- state = mongod.start(Version.Main.V4_4);
- final RunningMongodProcess mongodProcess = state.current();
- final ServerAddress addr = mongodProcess.getServerAddress();
- mongoClient = MongoClients.create(String.format("mongodb://%s:%d", addr.getHost(), addr.getPort()));
- props.setProperty(MongoDbTestConstants.PROP_NAME_PORT, addr.getPort());
+ public MongoClientHolder() {
+ mongoClient = MongoClients.create(String.format(
+ "mongodb://localhost:%d",
+ PropertiesUtil.getProperties().getIntegerProperty(MongoDbTestConstants.PROP_NAME_PORT, 27017)));
}
@Override
@@ -154,30 +61,6 @@ public MongoClient get() {
@Override
public void close() throws Exception {
mongoClient.close();
- state.close();
- }
- }
-
- private static final class StatusLoggerStreamProcessor implements StreamProcessor {
-
- private final Level level;
-
- public StatusLoggerStreamProcessor(Level level) {
- this.level = level;
- }
-
- @Override
- public void process(String line) {
- LOGGER.log(level, () -> stripLineEndings(line));
- }
-
- @Override
- public void onProcessed() {}
-
- protected String stripLineEndings(String line) {
- // we still need to remove line endings that are passed on by
- // StreamToLineProcessor...
- return line.replaceAll("[\n\r]+", "");
}
}
}
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbResolverTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbResolverIT.java
similarity index 86%
rename from log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbResolverTest.java
rename to log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbResolverIT.java
index 199cabcb2fe..dd6a544ca95 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbResolverTest.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbResolverIT.java
@@ -20,6 +20,7 @@
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoIterable;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
import org.junit.jupiter.api.Test;
/**
@@ -29,10 +30,12 @@
*
*/
@UsingMongoDb
-public class MongoDbResolverTest {
+// Print debug status logger output upon failure
+@UsingStatusListener
+class MongoDbResolverIT {
@Test
- public void testAccess(final MongoClient mongoClient) {
+ void testAccess(final MongoClient mongoClient) {
final MongoIterable databaseNames = mongoClient.listDatabaseNames();
assertNotNull(databaseNames);
assertNotNull(databaseNames.first());
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbTestConstants.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbTestConstants.java
index ed5435599b9..95ed9ccbb5d 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbTestConstants.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbTestConstants.java
@@ -18,7 +18,6 @@
public class MongoDbTestConstants {
- public static final String PROP_NAME_PORT = "MongoDBTestPort";
- static final String COLLECTION_NAME = "testCollection";
+ public static final String PROP_NAME_PORT = "log4j.mongo.port";
static final String DATABASE_NAME = "testDb";
}
diff --git a/log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml b/log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml
new file mode 100644
index 00000000000..600296753eb
--- /dev/null
+++ b/log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/log4j-mongodb/src/test/resources/log4j2-mongodb-auth-failure.xml b/log4j-mongodb/src/test/resources/MongoDbAuthFailureIT.xml
similarity index 67%
rename from log4j-mongodb/src/test/resources/log4j2-mongodb-auth-failure.xml
rename to log4j-mongodb/src/test/resources/MongoDbAuthFailureIT.xml
index e84603a0a52..797dfb47ed7 100644
--- a/log4j-mongodb/src/test/resources/log4j2-mongodb-auth-failure.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbAuthFailureIT.xml
@@ -15,16 +15,20 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-
+
-
+
+ connection="mongodb://log4jUser:12345678@localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbAuthFailureIT" />
-
+
diff --git a/log4j-mongodb/src/test/resources/log4j2-mongodb-capped-int.xml b/log4j-mongodb/src/test/resources/MongoDbCappedIntIT.xml
similarity index 70%
rename from log4j-mongodb/src/test/resources/log4j2-mongodb-capped-int.xml
rename to log4j-mongodb/src/test/resources/MongoDbCappedIntIT.xml
index 746b19914e7..f1574d396ae 100644
--- a/log4j-mongodb/src/test/resources/log4j2-mongodb-capped-int.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbCappedIntIT.xml
@@ -15,18 +15,22 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-
+
-
+
-
+
diff --git a/log4j-mongodb/src/test/resources/log4j2-mongodb-capped-long.xml b/log4j-mongodb/src/test/resources/MongoDbCappedLongIT.xml
similarity index 71%
rename from log4j-mongodb/src/test/resources/log4j2-mongodb-capped-long.xml
rename to log4j-mongodb/src/test/resources/MongoDbCappedLongIT.xml
index 941ea71c4e2..0ac524fdea7 100644
--- a/log4j-mongodb/src/test/resources/log4j2-mongodb-capped-long.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbCappedLongIT.xml
@@ -15,19 +15,23 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-
+
-
+
-
+
diff --git a/log4j-mongodb/src/test/resources/log4j2-mongodb-additional-fields.xml b/log4j-mongodb/src/test/resources/MongoDbIT.xml
similarity index 68%
rename from log4j-mongodb/src/test/resources/log4j2-mongodb-additional-fields.xml
rename to log4j-mongodb/src/test/resources/MongoDbIT.xml
index 89a642f3b5d..df713f01795 100644
--- a/log4j-mongodb/src/test/resources/log4j2-mongodb-additional-fields.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbIT.xml
@@ -15,19 +15,19 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-
+
-
-
-
-
-
-
+
+
-
+
diff --git a/log4j-mongodb/src/test/resources/log4j2-mongodb-map-message.xml b/log4j-mongodb/src/test/resources/MongoDbMapMessageIT.xml
similarity index 68%
rename from log4j-mongodb/src/test/resources/log4j2-mongodb-map-message.xml
rename to log4j-mongodb/src/test/resources/MongoDbMapMessageIT.xml
index 4b740bc947e..774fa4bfaed 100644
--- a/log4j-mongodb/src/test/resources/log4j2-mongodb-map-message.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbMapMessageIT.xml
@@ -15,16 +15,20 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-
+
-
-
+
+
-
+
diff --git a/log4j-mongodb/src/test/resources/log4j2-mongodb.xml b/log4j-mongodb/src/test/resources/log4j2-mongodb.xml
deleted file mode 100644
index 4f0865b2c46..00000000000
--- a/log4j-mongodb/src/test/resources/log4j2-mongodb.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/log4j-parent/pom.xml b/log4j-parent/pom.xml
index 8b9a935dcae..eb835fd6760 100644
--- a/log4j-parent/pom.xml
+++ b/log4j-parent/pom.xml
@@ -108,8 +108,6 @@
7.17.24
0.9.0
7.0.5
- 4.13.1
- 1.8.0
24.0.2
4.0.23
33.3.0-jre
@@ -137,7 +135,6 @@
1.4.14
3.9.9
5.13.0
- 5.1.3
15.4
1.3.0
3.21.0
@@ -263,12 +260,6 @@
${bsh.version}
-
- org.mongodb
- bson
- ${mongodb.version}
-
-
net.bytebuddy
byte-buddy
@@ -324,24 +315,6 @@
${commons-pool2.version}
-
- de.flapdoodle.embed
- de.flapdoodle.embed.mongo
- ${flapdoodle-embed.version}
-
-
-
- de.flapdoodle.embed
- de.flapdoodle.embed.process
- ${flapdoodle-embed.version}
-
-
-
- de.flapdoodle.reverse
- de.flapdoodle.reverse
- ${flapdoodle-reverse.version}
-
-
com.lmax
disruptor
@@ -550,18 +523,6 @@
${maven.version}
-
- org.mongodb
- mongodb-driver-core
- ${mongodb.version}
-
-
-
- org.mongodb
- mongodb-driver-sync
- ${mongodb.version}
-
-
org.openjdk.nashorn
nashorn-core
@@ -758,6 +719,12 @@
+
+ io.fabric8
+ docker-maven-plugin
+ ${docker-maven-plugin.version}
+
+
org.ops4j.pax.exam
exam-maven-plugin
diff --git a/pom.xml b/pom.xml
index 389afde6a3f..d8cba99194f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -367,6 +367,8 @@
${maven.multiModuleProjectDirectory}/target/plugin-descriptors/phase1
${maven.multiModuleProjectDirectory}/target/plugin-descriptors/phase2
+
+ 3.2.5
diff --git a/src/changelog/.3.x.x/2229_mongodb_docker.xml b/src/changelog/.3.x.x/2229_mongodb_docker.xml
new file mode 100644
index 00000000000..1d5b36ed1ca
--- /dev/null
+++ b/src/changelog/.3.x.x/2229_mongodb_docker.xml
@@ -0,0 +1,8 @@
+
+
+
+ Switch MongoDB tests to use Docker.
+