This is an automated email from the ASF dual-hosted git repository. pkarwasz pushed a commit to branch feature/main/2229_mongodb_docker in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 5cb6ecdf88dc2930ce68de00f2b4d55604143608 Author: Piotr P. Karwasz <[email protected]> AuthorDate: Fri Sep 6 08:53:43 2024 +0200 Switch MongoDB tests to use Docker 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. --- log4j-mongodb/pom.xml | 93 +++++++++++++- ...appedTest.java => AbstractMongoDbCappedIT.java} | 11 +- ...ldsTest.java => MongoDbAdditionalFieldsIT.java} | 11 +- ...hFailureTest.java => MongoDbAuthFailureIT.java} | 12 +- ...bCappedIntTest.java => MongoDbCappedIntIT.java} | 13 +- ...appedLongTest.java => MongoDbCappedLongIT.java} | 13 +- .../mongodb/{MongoDbTest.java => MongoDbIT.java} | 12 +- ...apMessageTest.java => MongoDbMapMessageIT.java} | 11 +- .../logging/log4j/mongodb/MongoDbResolver.java | 133 ++------------------- ...oDbResolverTest.java => MongoDbResolverIT.java} | 4 +- .../log4j/mongodb/MongoDbTestConstants.java | 3 +- ...onal-fields.xml => MongoDbAdditionalFields.xml} | 2 +- ...b-auth-failure.xml => MongoDbAuthFailureIT.xml} | 4 +- ...ngodb-capped-int.xml => MongoDbCappedIntIT.xml} | 2 +- ...odb-capped-long.xml => MongoDbCappedLongIT.xml} | 2 +- .../{log4j2-mongodb.xml => MongoDbIT.xml} | 2 +- ...odb-map-message.xml => MongoDbMapMessageIT.xml} | 2 +- log4j-parent/pom.xml | 6 + src/changelog/.3.x.x/2229_mongodb_docker.xml | 8 ++ 19 files changed, 174 insertions(+), 170 deletions(-) diff --git a/log4j-mongodb/pom.xml b/log4j-mongodb/pom.xml index 3ccd7f9df7..d2f05d29a7 100644 --- a/log4j-mongodb/pom.xml +++ b/log4j-mongodb/pom.xml @@ -122,8 +122,7 @@ <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> - <!-- TODO: fix concurrent download of MongoDB distribution. --> - <forkCount>1</forkCount> + <skip>true</skip> </configuration> <dependencies> <dependency> @@ -142,4 +141,94 @@ </plugins> </build> + <profiles> + <profile> + + <id>docker</id> + + <activation> + <property> + <name>env.CI</name> + <value>true</value> + </property> + </activation> + + <build> + <plugins> + + <plugin> + <groupId>io.fabric8</groupId> + <artifactId>docker-maven-plugin</artifactId> + <configuration> + <verbose>all</verbose> + <startParallel>true</startParallel> + <autoCreateCustomNetworks>true</autoCreateCustomNetworks> + <images> + <image> + <alias>mongo</alias> + <name>mongo:latest</name> + <run> + <ports> + <port>localhost:mongo.port:27017</port> + </ports> + </run> + </image> + </images> + </configuration> + <executions> + <execution> + <id>start-mongo</id> + <goals> + <goal>start</goal> + </goals> + </execution> + <execution> + <id>stop-mongo</id> + <goals> + <goal>stop</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-failsafe-plugin</artifactId> + <dependencies> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-engine</artifactId> + <version>${junit-jupiter.version}</version> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-nop</artifactId> + <version>${slf4j2.version}</version> + </dependency> + </dependencies> + <executions> + <execution> + <goals> + <goal>integration-test</goal> + <goal>verify</goal> + </goals> + <configuration> + <reuseForks>true</reuseForks> + <includes> + <include>**/*IT.java</include> + </includes> + <systemPropertyVariables> + <log4j.mongo.port>${mongo.port}</log4j.mongo.port> + </systemPropertyVariables> + </configuration> + </execution> + </executions> + </plugin> + + </plugins> + </build> + + </profile> + </profiles> + </project> 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 07e3933994..56cf3a89be 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.Logger; 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<Document> collection = database.getCollection(MongoDbTestConstants.COLLECTION_NAME); + final MongoCollection<Document> 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 91% 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 c74172925f..4f309742b3 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 @@ -30,17 +30,18 @@ import org.bson.Document; import org.junit.jupiter.api.Test; @UsingMongoDb -@LoggerContextSource("log4j2-mongodb-additional-fields.xml") -public class MongoDbAdditionalFieldsTest { +@LoggerContextSource("MongoDbAdditionalFields.xml") +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<Document> collection = database.getCollection(MongoDbTestConstants.COLLECTION_NAME); + final MongoCollection<Document> collection = + database.getCollection(getClass().getSimpleName()); assertNotNull(collection); final FindIterable<Document> 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 81% 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 3247dc28c0..a33bfe3775 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 @@ -29,16 +29,18 @@ import org.bson.Document; import org.junit.jupiter.api.Test; @UsingMongoDb -@LoggerContextSource("log4j2-mongodb-auth-failure.xml") -public class MongoDbAuthFailureTest { +@LoggerContextSource("MongoDbAuthFailureIT.xml") +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<Document> collection = database.getCollection(MongoDbTestConstants.DATABASE_NAME); + final MongoCollection<Document> 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/MongoDbCappedIntTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedIntIT.java similarity index 71% 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/MongoDbCappedIntIT.java index 500964aff0..6c45bb19f8 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/MongoDbCappedIntIT.java @@ -16,11 +16,18 @@ */ 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.junit.jupiter.api.Test; @UsingMongoDb -@LoggerContextSource("log4j2-mongodb-capped-int.xml") -public class MongoDbCappedIntTest extends AbstractMongoDbCappedTest { +@LoggerContextSource("MongoDbCappedIntIT.xml") +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/MongoDbCappedLongTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedLongIT.java similarity index 71% 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/MongoDbCappedLongIT.java index 34f921fe7b..ad6a25e3b7 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/MongoDbCappedLongIT.java @@ -16,11 +16,18 @@ */ 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.junit.jupiter.api.Test; @UsingMongoDb -@LoggerContextSource("log4j2-mongodb-capped-long.xml") -public class MongoDbCappedLongTest extends AbstractMongoDbCappedTest { +@LoggerContextSource("MongoDbCappedLongIT.xml") +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 87% 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 5c4bbb750c..ad571355ca 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 @@ -30,17 +30,19 @@ import org.bson.Document; import org.junit.jupiter.api.Test; @UsingMongoDb -@LoggerContextSource("log4j2-mongodb.xml") -public class MongoDbTest { +@LoggerContextSource("MongoDbIT.xml") +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<Document> collection = database.getCollection(MongoDbTestConstants.COLLECTION_NAME); + final MongoCollection<Document> collection = + database.getCollection(getClass().getSimpleName()); + ; assertNotNull(collection); final FindIterable<Document> 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 84% 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 2733554dbd..fa2a6d7826 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 @@ -28,19 +28,20 @@ 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") +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<Document> collection = database.getCollection(MongoDbTestConstants.COLLECTION_NAME); + final MongoCollection<Document> 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 3fff459b74..3c0888fc9d 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 @@ package org.apache.logging.log4j.mongodb; 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.ParameterContext; import org.junit.jupiter.api.extension.ParameterResolutionException; import org.junit.jupiter.api.extension.support.TypeBasedParameterResolver; -public class MongoDbResolver extends TypeBasedParameterResolver<MongoClient> implements BeforeAllCallback { +class MongoDbResolver extends TypeBasedParameterResolver<MongoClient> 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 class MongoDbResolver extends TypeBasedParameterResolver<MongoClient> imp .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<MongoClient> { - private final ReachedState<RunningMongodProcess> 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 class MongoDbResolver extends TypeBasedParameterResolver<MongoClient> imp @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 93% 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 199cabcb2f..c4a033c5e8 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 @@ -29,10 +29,10 @@ import org.junit.jupiter.api.Test; * </p> */ @UsingMongoDb -public class MongoDbResolverTest { +class MongoDbResolverIT { @Test - public void testAccess(final MongoClient mongoClient) { + void testAccess(final MongoClient mongoClient) { final MongoIterable<String> 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 ed5435599b..95ed9ccbb5 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 @@ package org.apache.logging.log4j.mongodb; 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/log4j2-mongodb-additional-fields.xml b/log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml similarity index 91% rename from log4j-mongodb/src/test/resources/log4j2-mongodb-additional-fields.xml rename to log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml index 89a642f3b5..c4298c8123 100644 --- a/log4j-mongodb/src/test/resources/log4j2-mongodb-additional-fields.xml +++ b/log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml @@ -18,7 +18,7 @@ <Configuration status="WARN"> <Appenders> <NoSql name="MongoDbAppender"> - <MongoDb connection="mongodb://localhost:${test:MongoDBTestPort:-27017}/testDb.testCollection" /> + <MongoDb connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbAdditionalFieldsIT" /> <KeyValuePair key="A" value="1" /> <KeyValuePair key="B" value="2" /> <KeyValuePair key="env1" value="${env:PATH}" /> diff --git a/log4j-mongodb/src/test/resources/log4j2-mongodb-auth-failure.xml b/log4j-mongodb/src/test/resources/MongoDbAuthFailureIT.xml similarity index 87% rename from log4j-mongodb/src/test/resources/log4j2-mongodb-auth-failure.xml rename to log4j-mongodb/src/test/resources/MongoDbAuthFailureIT.xml index e84603a0a5..1b10bc748c 100644 --- a/log4j-mongodb/src/test/resources/log4j2-mongodb-auth-failure.xml +++ b/log4j-mongodb/src/test/resources/MongoDbAuthFailureIT.xml @@ -15,11 +15,11 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> -<Configuration status="WARN"> +<Configuration status="OFF"> <Appenders> <NoSql name="MongoDbAppender"> <MongoDb - connection="mongodb://log4jUser:12345678@localhost:${test:MongoDBTestPort:-27017}/testDb.testCollection" /> + connection="mongodb://log4jUser:12345678@localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbAuthFailureIT" /> </NoSql> </Appenders> <Loggers> diff --git a/log4j-mongodb/src/test/resources/log4j2-mongodb-capped-int.xml b/log4j-mongodb/src/test/resources/MongoDbCappedIntIT.xml similarity index 92% rename from log4j-mongodb/src/test/resources/log4j2-mongodb-capped-int.xml rename to log4j-mongodb/src/test/resources/MongoDbCappedIntIT.xml index 746b19914e..0ae276d861 100644 --- a/log4j-mongodb/src/test/resources/log4j2-mongodb-capped-int.xml +++ b/log4j-mongodb/src/test/resources/MongoDbCappedIntIT.xml @@ -19,7 +19,7 @@ <Appenders> <NoSql name="MongoDbAppender"> <MongoDb - connection="mongodb://localhost:${test:MongoDBTestPort:-27017}/testDb.testCollection" + connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbCappedIntIT" capped="true" collectionSize="1073741824"/> </NoSql> diff --git a/log4j-mongodb/src/test/resources/log4j2-mongodb-capped-long.xml b/log4j-mongodb/src/test/resources/MongoDbCappedLongIT.xml similarity index 92% rename from log4j-mongodb/src/test/resources/log4j2-mongodb-capped-long.xml rename to log4j-mongodb/src/test/resources/MongoDbCappedLongIT.xml index 941ea71c4e..4199915978 100644 --- a/log4j-mongodb/src/test/resources/log4j2-mongodb-capped-long.xml +++ b/log4j-mongodb/src/test/resources/MongoDbCappedLongIT.xml @@ -20,7 +20,7 @@ <NoSql name="MongoDbAppender"> <!-- collectionSize="2147483657" is max int + 10 --> <MongoDb - connection="mongodb://localhost:${test:MongoDBTestPort:-27017}/testDb.testCollection" + connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbCappedLongIT" capped="true" collectionSize="2147483657"/> </NoSql> diff --git a/log4j-mongodb/src/test/resources/log4j2-mongodb.xml b/log4j-mongodb/src/test/resources/MongoDbIT.xml similarity index 91% rename from log4j-mongodb/src/test/resources/log4j2-mongodb.xml rename to log4j-mongodb/src/test/resources/MongoDbIT.xml index 4f0865b2c4..cc0cc2677b 100644 --- a/log4j-mongodb/src/test/resources/log4j2-mongodb.xml +++ b/log4j-mongodb/src/test/resources/MongoDbIT.xml @@ -18,7 +18,7 @@ <Configuration status="WARN"> <Appenders> <NoSql name="MongoDbAppender"> - <MongoDb connection="mongodb://localhost:${test:MongoDBTestPort:-27017}/testDb.testCollection" /> + <MongoDb connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbIT" /> </NoSql> </Appenders> <Loggers> diff --git a/log4j-mongodb/src/test/resources/log4j2-mongodb-map-message.xml b/log4j-mongodb/src/test/resources/MongoDbMapMessageIT.xml similarity index 91% rename from log4j-mongodb/src/test/resources/log4j2-mongodb-map-message.xml rename to log4j-mongodb/src/test/resources/MongoDbMapMessageIT.xml index 4b740bc947..2c58cd208c 100644 --- a/log4j-mongodb/src/test/resources/log4j2-mongodb-map-message.xml +++ b/log4j-mongodb/src/test/resources/MongoDbMapMessageIT.xml @@ -18,7 +18,7 @@ <Configuration status="WARN"> <Appenders> <NoSql name="MongoDbAppender"> - <MongoDb connection="mongodb://localhost:${test:MongoDBTestPort:-27017}/testDb.testCollection" /> + <MongoDb connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbMapMessageIT" /> <MessageLayout /> </NoSql> </Appenders> diff --git a/log4j-parent/pom.xml b/log4j-parent/pom.xml index ca79e7308d..4f3168dad7 100644 --- a/log4j-parent/pom.xml +++ b/log4j-parent/pom.xml @@ -764,6 +764,12 @@ <pluginManagement> <plugins> + <plugin> + <groupId>io.fabric8</groupId> + <artifactId>docker-maven-plugin</artifactId> + <version>${docker-maven-plugin.version}</version> + </plugin> + <plugin> <groupId>org.ops4j.pax.exam</groupId> <artifactId>exam-maven-plugin</artifactId> 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 0000000000..1d5b36ed1c --- /dev/null +++ b/src/changelog/.3.x.x/2229_mongodb_docker.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="https://logging.apache.org/xml/ns" + xsi:schemaLocation="https://logging.apache.org/xml/ns https://logging.apache.org/xml/ns/log4j-changelog-0.xsd" + type="fixed"> + <issue id="2229" link="https://github.com/apache/logging-log4j2/issues/2229"/> + <description format="asciidoc">Switch MongoDB tests to use Docker.</description> +</entry>
