From 0cb1e75c32333264e4c243a9ca8cccf582a64039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Thu, 25 Aug 2022 10:39:50 -0600 Subject: [PATCH] Add compatibility with MongoDB 6 MongoDB 6 removed `mongo` shell and `mongosh` is recommended. See [here](https://www.mongodb.com/docs/manual/release-notes/6.0-compatibility/#legacy-mongo-shell-removed) Closes #5768 --- .../org/testcontainers/containers/MongoDBContainer.java | 8 +++++++- .../testcontainers/containers/MongoDBContainerTest.java | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/modules/mongodb/src/main/java/org/testcontainers/containers/MongoDBContainer.java b/modules/mongodb/src/main/java/org/testcontainers/containers/MongoDBContainer.java index 81bb59fd69d..cd2294e09ac 100644 --- a/modules/mongodb/src/main/java/org/testcontainers/containers/MongoDBContainer.java +++ b/modules/mongodb/src/main/java/org/testcontainers/containers/MongoDBContainer.java @@ -5,6 +5,7 @@ import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.utility.ComparableVersion; import org.testcontainers.utility.DockerImageName; import java.io.IOException; @@ -29,6 +30,8 @@ public class MongoDBContainer extends GenericContainer { private static final String MONGODB_DATABASE_NAME_DEFAULT = "test"; + private final boolean isAtLeastVersion6; + /** * @deprecated use {@link MongoDBContainer(DockerImageName)} instead */ @@ -45,6 +48,8 @@ public MongoDBContainer(final DockerImageName dockerImageName) { super(dockerImageName); dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME); + this.isAtLeastVersion6 = new ComparableVersion(dockerImageName.getVersionPart()).isGreaterThanOrEqualTo("6.0"); + withExposedPorts(MONGODB_INTERNAL_PORT); withCommand("--replSet", "docker-rs"); waitingFor(Wait.forLogMessage("(?i).*waiting for connections.*", 1)); @@ -87,7 +92,8 @@ protected void containerIsStarted(InspectContainerResponse containerInfo) { } private String[] buildMongoEvalCommand(final String command) { - return new String[] { "mongo", "--eval", command }; + String cmd = this.isAtLeastVersion6 ? "mongosh" : "mongo"; + return new String[] { cmd, "--eval", command }; } private void checkMongoNodeExitCode(final Container.ExecResult execResult) { diff --git a/modules/mongodb/src/test/java/org/testcontainers/containers/MongoDBContainerTest.java b/modules/mongodb/src/test/java/org/testcontainers/containers/MongoDBContainerTest.java index ff6d0d6ccba..acaa6c8e5d8 100644 --- a/modules/mongodb/src/test/java/org/testcontainers/containers/MongoDBContainerTest.java +++ b/modules/mongodb/src/test/java/org/testcontainers/containers/MongoDBContainerTest.java @@ -98,4 +98,11 @@ public void shouldTestDatabaseName() { assertThat(mongoDBContainer.getReplicaSetUrl(databaseName)).endsWith(databaseName); } } + + @Test + public void supportsMongoDB_6() { + try (final MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:6.0.1")) { + mongoDBContainer.start(); + } + } }