diff --git a/app/server/appsmith-plugins/mongoPlugin/pom.xml b/app/server/appsmith-plugins/mongoPlugin/pom.xml
index 6e5c8345ba..d355dcf266 100644
--- a/app/server/appsmith-plugins/mongoPlugin/pom.xml
+++ b/app/server/appsmith-plugins/mongoPlugin/pom.xml
@@ -14,4 +14,20 @@
mongoPlugin
+
+
+
+ org.testcontainers
+ mongodb
+ 1.19.1
+ test
+
+
+ junit
+ junit
+
+
+
+
+
diff --git a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginDatasourceTest.java b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginDatasourceTest.java
index cc804950f6..e46c9e774e 100644
--- a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginDatasourceTest.java
+++ b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginDatasourceTest.java
@@ -18,7 +18,7 @@ import com.mongodb.reactivestreams.client.MongoClient;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.MongoDBContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import reactor.core.publisher.Mono;
@@ -47,6 +47,7 @@ import static com.external.plugins.utils.DatasourceUtils.extractInfoFromConnecti
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doReturn;
@@ -66,11 +67,11 @@ public class MongoPluginDatasourceTest {
@SuppressWarnings("rawtypes")
@Container
- public static GenericContainer mongoContainer = new MongoTestContainer();
+ public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
@BeforeAll
public static void setUp() {
- address = mongoContainer.getContainerIpAddress();
+ address = mongoContainer.getHost();
port = mongoContainer.getFirstMappedPort();
}
@@ -99,10 +100,7 @@ public class MongoPluginDatasourceTest {
Mono dsConnectionMono = pluginExecutor.datasourceCreate(dsConfig);
StepVerifier.create(dsConnectionMono)
- .assertNext(obj -> {
- MongoClient client = obj;
- assertNotNull(client);
- })
+ .assertNext(Assertions::assertNotNull)
.verifyComplete();
}
@@ -268,7 +266,7 @@ public class MongoPluginDatasourceTest {
.assertNext(invalids -> {
String expectedError = "Appsmith server has failed to fetch SSL configuration from datasource "
+ "configuration form. Please reach out to Appsmith customer support to resolve this.";
- assertTrue(invalids.stream().anyMatch(error -> expectedError.equals(error)));
+ assertTrue(invalids.stream().anyMatch(expectedError::equals));
})
.verifyComplete();
}
@@ -420,8 +418,8 @@ public class MongoPluginDatasourceTest {
+ "&minpoolsize=0";
Map extractedInfo = extractInfoFromConnectionStringURI(uri, MONGO_URI_REGEX);
assertEquals("mongodb://", extractedInfo.get(KEY_URI_HEAD));
- assertEquals(null, extractedInfo.get(KEY_USERNAME));
- assertEquals(null, extractedInfo.get(KEY_PASSWORD));
+ assertNull(extractedInfo.get(KEY_USERNAME));
+ assertNull(extractedInfo.get(KEY_PASSWORD));
assertEquals("localhost:28017", extractedInfo.get(KEY_HOST_PORT));
assertEquals("mongo_samples", extractedInfo.get(KEY_URI_DEFAULT_DBNAME));
assertEquals("w=majority&retrywrites=true&authsource=admin&minpoolsize=0", extractedInfo.get(KEY_URI_TAIL));
@@ -433,8 +431,8 @@ public class MongoPluginDatasourceTest {
+ "&minpoolsize=0";
Map extractedInfo = extractInfoFromConnectionStringURI(uri, MONGO_URI_REGEX);
assertEquals("mongodb://", extractedInfo.get(KEY_URI_HEAD));
- assertEquals(null, extractedInfo.get(KEY_USERNAME));
- assertEquals(null, extractedInfo.get(KEY_PASSWORD));
+ assertNull(extractedInfo.get(KEY_USERNAME));
+ assertNull(extractedInfo.get(KEY_PASSWORD));
assertEquals("localhost:28017", extractedInfo.get(KEY_HOST_PORT));
assertEquals("mongo_samples", extractedInfo.get(KEY_URI_DEFAULT_DBNAME));
assertEquals("w=majority&retrywrites=true&authsource=admin&minpoolsize=0", extractedInfo.get(KEY_URI_TAIL));
diff --git a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginErrorsTest.java b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginErrorsTest.java
index 43beac875b..feb91e5441 100644
--- a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginErrorsTest.java
+++ b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginErrorsTest.java
@@ -14,16 +14,14 @@ import com.appsmith.external.models.Property;
import com.appsmith.external.models.SSLDetails;
import com.external.plugins.exceptions.MongoPluginError;
import com.external.plugins.exceptions.MongoPluginErrorMessages;
-import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.mongodb.MongoCommandException;
import com.mongodb.MongoSecurityException;
import com.mongodb.reactivestreams.client.MongoClient;
-import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoDatabase;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.MongoDBContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import reactor.core.publisher.Mono;
@@ -70,19 +68,15 @@ public class MongoPluginErrorsTest {
private static String address;
private static Integer port;
- private JsonNode value;
- private static MongoClient mongoClient;
@SuppressWarnings("rawtypes")
@Container
- public static GenericContainer mongoContainer = new MongoTestContainer();
+ public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
@BeforeAll
public static void setUp() {
- address = mongoContainer.getContainerIpAddress();
+ address = mongoContainer.getHost();
port = mongoContainer.getFirstMappedPort();
- String uri = "mongodb://" + address + ":" + port;
- mongoClient = MongoClients.create(uri);
}
private DatasourceConfiguration createDatasourceConfiguration() {
diff --git a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginFormsTest.java b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginFormsTest.java
index 9619c186f7..00b84f9859 100644
--- a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginFormsTest.java
+++ b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginFormsTest.java
@@ -21,7 +21,7 @@ import com.mongodb.reactivestreams.client.MongoCollection;
import org.bson.Document;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.MongoDBContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import reactor.core.publisher.Flux;
@@ -73,11 +73,11 @@ public class MongoPluginFormsTest {
@SuppressWarnings("rawtypes")
@Container
- public static GenericContainer mongoContainer = new MongoTestContainer();
+ public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
@BeforeAll
public static void setUp() {
- address = mongoContainer.getContainerIpAddress();
+ address = mongoContainer.getHost();
port = mongoContainer.getFirstMappedPort();
String uri = "mongodb://" + address + ":" + port;
mongoClient = MongoClients.create(uri);
diff --git a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginQueriesTest.java b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginQueriesTest.java
index aee5e2c636..fb02c1ca90 100644
--- a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginQueriesTest.java
+++ b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginQueriesTest.java
@@ -18,10 +18,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.mongodb.reactivestreams.client.MongoClient;
-import com.mongodb.reactivestreams.client.MongoClients;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.MongoDBContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import reactor.core.publisher.Mono;
@@ -71,18 +70,15 @@ public class MongoPluginQueriesTest {
private static String address;
private static Integer port;
private JsonNode value;
- private static MongoClient mongoClient;
@SuppressWarnings("rawtypes")
@Container
- public static GenericContainer mongoContainer = new MongoTestContainer();
+ public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
@BeforeAll
public static void setUp() {
- address = mongoContainer.getContainerIpAddress();
+ address = mongoContainer.getHost();
port = mongoContainer.getFirstMappedPort();
- String uri = "mongodb://" + address + ":" + port;
- mongoClient = MongoClients.create(uri);
}
private DatasourceConfiguration createDatasourceConfiguration() {
diff --git a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginRegexTest.java b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginRegexTest.java
index 782bf80fb4..b290feaed5 100644
--- a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginRegexTest.java
+++ b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginRegexTest.java
@@ -9,13 +9,11 @@ import com.appsmith.external.models.Endpoint;
import com.appsmith.external.models.Param;
import com.appsmith.external.models.ParsedDataType;
import com.appsmith.external.models.SSLDetails;
-import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.mongodb.reactivestreams.client.MongoClient;
-import com.mongodb.reactivestreams.client.MongoClients;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.MongoDBContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import reactor.core.publisher.Mono;
@@ -44,19 +42,15 @@ public class MongoPluginRegexTest {
private static String address;
private static Integer port;
- private JsonNode value;
- private static MongoClient mongoClient;
@SuppressWarnings("rawtypes")
@Container
- public static GenericContainer mongoContainer = new MongoTestContainer();
+ public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
@BeforeAll
public static void setUp() {
- address = mongoContainer.getContainerIpAddress();
+ address = mongoContainer.getHost();
port = mongoContainer.getFirstMappedPort();
- String uri = "mongodb://" + address + ":" + port;
- mongoClient = MongoClients.create(uri);
}
private DatasourceConfiguration createDatasourceConfiguration() {
diff --git a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginStaleConnTest.java b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginStaleConnTest.java
index 18b6c0a98c..e99624f152 100644
--- a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginStaleConnTest.java
+++ b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoPluginStaleConnTest.java
@@ -8,14 +8,12 @@ import com.appsmith.external.models.DatasourceConfiguration;
import com.appsmith.external.models.DatasourceStructure;
import com.appsmith.external.models.Endpoint;
import com.appsmith.external.models.SSLDetails;
-import com.fasterxml.jackson.databind.JsonNode;
import com.mongodb.MongoSocketWriteException;
import com.mongodb.reactivestreams.client.MongoClient;
-import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoDatabase;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.containers.MongoDBContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import reactor.core.publisher.Mono;
@@ -44,19 +42,15 @@ public class MongoPluginStaleConnTest {
private static String address;
private static Integer port;
- private JsonNode value;
- private static MongoClient mongoClient;
@SuppressWarnings("rawtypes")
@Container
- public static GenericContainer mongoContainer = new MongoTestContainer();
+ public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
@BeforeAll
public static void setUp() {
- address = mongoContainer.getContainerIpAddress();
+ address = mongoContainer.getHost();
port = mongoContainer.getFirstMappedPort();
- String uri = "mongodb://" + address + ":" + port;
- mongoClient = MongoClients.create(uri);
}
private DatasourceConfiguration createDatasourceConfiguration() {
diff --git a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoTestContainer.java b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoTestContainer.java
deleted file mode 100644
index 7893b993a4..0000000000
--- a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoTestContainer.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package com.external.plugins;
-
-import com.github.dockerjava.api.command.InspectContainerResponse;
-import com.mongodb.DBRef;
-import com.mongodb.reactivestreams.client.MongoClient;
-import com.mongodb.reactivestreams.client.MongoClients;
-import com.mongodb.reactivestreams.client.MongoCollection;
-import org.bson.Document;
-import org.bson.types.BSONTimestamp;
-import org.bson.types.Decimal128;
-import org.testcontainers.containers.GenericContainer;
-import reactor.core.publisher.Flux;
-import reactor.core.publisher.Mono;
-
-import java.math.BigDecimal;
-import java.sql.Date;
-import java.time.LocalDate;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CompletableFuture;
-
-public class MongoTestContainer extends GenericContainer {
-
- private static MongoClient mongoClient;
-
- public MongoTestContainer() {
- super(CompletableFuture.completedFuture("mongo:4.4"));
- addExposedPorts(27017);
- }
-
- /*
- * this is overridden to prepare Mongo with sample dataset after the test container is started
- */
- @Override
- protected void containerIsStarted(InspectContainerResponse containerInfo) {
-
- String uri = "mongodb://" + getHost() + ":" + getFirstMappedPort();
- mongoClient = MongoClients.create(uri);
-
- Flux.from(mongoClient.getDatabase("test").listCollectionNames())
- .collectList()
- .flatMap(collectionNamesList -> {
- if (collectionNamesList.size() == 0) {
- final MongoCollection usersCollection =
- mongoClient.getDatabase("test").getCollection("users");
- Mono.from(usersCollection.insertMany(List.of(
- new Document(Map.of(
- "name",
- "Cierra Vega",
- "gender",
- "F",
- "age",
- 20,
- "luckyNumber",
- 987654321L,
- "dob",
- LocalDate.of(2018, 12, 31),
- "netWorth",
- new BigDecimal("123456.789012"),
- "updatedByCommand",
- false)),
- new Document(Map.of(
- "name",
- "Alden Cantrell",
- "gender",
- "M",
- "age",
- 30,
- "dob",
- new Date(0),
- "netWorth",
- Decimal128.parse("123456.789012"),
- "updatedByCommand",
- false,
- "aLong",
- 9_000_000_000_000_000_000L,
- "ts",
- new BSONTimestamp(1421006159, 4))),
- new Document(Map.of("name", "Kierra Gentry", "gender", "F", "age", 40)))))
- .block();
-
- final MongoCollection addressCollection =
- mongoClient.getDatabase("test").getCollection("address");
- Mono.from(addressCollection.insertMany(List.of(
- new Document(Map.of(
- "user", new DBRef("test", "users", "1"),
- "street", "First Street",
- "city", "Line One",
- "state", "UP")),
- new Document(Map.of(
- "user", new DBRef("AAA", "BBB", "2000"),
- "street", "Second Street",
- "city", "Line Two",
- "state", "UP")))))
- .block();
-
- final MongoCollection teamCollection =
- mongoClient.getDatabase("test").getCollection("teams");
- Mono.from(teamCollection.insertMany(List.of(
- new Document(Map.of(
- "name", "Noisy Neighbours 2",
- "goals_allowed", "20",
- "goals_forwarded", "41",
- "goal_difference", "+21",
- "xGD", "-2.5",
- "best_scoreline", "5-2")),
- new Document(Map.of(
- "name", "Red Side of the city",
- "goals_allowed", "35",
- "goals_forwarded", "28",
- "goal_difference", "-7",
- "xGD", "+3.6",
- "best_scoreline", "8-3")))))
- .block();
- }
- return Mono.empty();
- })
- .block();
- }
-}
diff --git a/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoTestDBContainerManager.java b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoTestDBContainerManager.java
new file mode 100644
index 0000000000..f5bcd5dcb5
--- /dev/null
+++ b/app/server/appsmith-plugins/mongoPlugin/src/test/java/com/external/plugins/MongoTestDBContainerManager.java
@@ -0,0 +1,116 @@
+package com.external.plugins;
+
+import com.mongodb.DBRef;
+import com.mongodb.reactivestreams.client.MongoClient;
+import com.mongodb.reactivestreams.client.MongoClients;
+import com.mongodb.reactivestreams.client.MongoCollection;
+import org.bson.Document;
+import org.bson.types.BSONTimestamp;
+import org.bson.types.Decimal128;
+import org.testcontainers.containers.MongoDBContainer;
+import org.testcontainers.utility.DockerImageName;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.time.LocalDate;
+import java.util.List;
+import java.util.Map;
+
+public class MongoTestDBContainerManager {
+ public static final String MONGO_DOCKER_HUB_CONTAINER = "mongo:4.4";
+
+ public static MongoDBContainer getMongoDBForTest() {
+ MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse(MONGO_DOCKER_HUB_CONTAINER));
+ mongoDBContainer.start();
+ initialSetup(mongoDBContainer);
+ return mongoDBContainer;
+ }
+
+ private static void initialSetup(MongoDBContainer mongoDBContainer) {
+ String uri = "mongodb://" + mongoDBContainer.getHost() + ":" + mongoDBContainer.getFirstMappedPort();
+ try (MongoClient mongoClient = MongoClients.create(uri)) {
+
+ Flux.from(mongoClient.getDatabase("test").listCollectionNames())
+ .collectList()
+ .flatMap(collectionNamesList -> {
+ if (collectionNamesList.isEmpty()) {
+ final MongoCollection usersCollection =
+ mongoClient.getDatabase("test").getCollection("users");
+ Mono.from(usersCollection.insertMany(List.of(
+ new Document(Map.of(
+ "name",
+ "Cierra Vega",
+ "gender",
+ "F",
+ "age",
+ 20,
+ "luckyNumber",
+ 987654321L,
+ "dob",
+ LocalDate.of(2018, 12, 31),
+ "netWorth",
+ new BigDecimal("123456.789012"),
+ "updatedByCommand",
+ false)),
+ new Document(Map.of(
+ "name",
+ "Alden Cantrell",
+ "gender",
+ "M",
+ "age",
+ 30,
+ "dob",
+ new Date(0),
+ "netWorth",
+ Decimal128.parse("123456.789012"),
+ "updatedByCommand",
+ false,
+ "aLong",
+ 9_000_000_000_000_000_000L,
+ "ts",
+ new BSONTimestamp(1421006159, 4))),
+ new Document(Map.of("name", "Kierra Gentry", "gender", "F", "age", 40)))))
+ .block();
+
+ final MongoCollection addressCollection =
+ mongoClient.getDatabase("test").getCollection("address");
+ Mono.from(addressCollection.insertMany(List.of(
+ new Document(Map.of(
+ "user", new DBRef("test", "users", "1"),
+ "street", "First Street",
+ "city", "Line One",
+ "state", "UP")),
+ new Document(Map.of(
+ "user", new DBRef("AAA", "BBB", "2000"),
+ "street", "Second Street",
+ "city", "Line Two",
+ "state", "UP")))))
+ .block();
+
+ final MongoCollection teamCollection =
+ mongoClient.getDatabase("test").getCollection("teams");
+ Mono.from(teamCollection.insertMany(List.of(
+ new Document(Map.of(
+ "name", "Noisy Neighbours 2",
+ "goals_allowed", "20",
+ "goals_forwarded", "41",
+ "goal_difference", "+21",
+ "xGD", "-2.5",
+ "best_scoreline", "5-2")),
+ new Document(Map.of(
+ "name", "Red Side of the city",
+ "goals_allowed", "35",
+ "goals_forwarded", "28",
+ "goal_difference", "-7",
+ "xGD", "+3.6",
+ "best_scoreline", "8-3")))))
+ .block();
+ }
+ return Mono.empty();
+ })
+ .block();
+ }
+ }
+}