diff --git a/spring-ai-spring-boot-autoconfigure/pom.xml b/spring-ai-spring-boot-autoconfigure/pom.xml
index 9a0428fea01..c025947f0ca 100644
--- a/spring-ai-spring-boot-autoconfigure/pom.xml
+++ b/spring-ai-spring-boot-autoconfigure/pom.xml
@@ -494,6 +494,13 @@
test
+
+ org.testcontainers
+ mongodb
+ 1.20.2
+ test
+
+
org.testcontainers
qdrant
diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/mongo/MongoDBAtlasVectorStoreAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/mongo/MongoDBAtlasVectorStoreAutoConfigurationIT.java
index 8fbad0b274e..9e10fcc06a7 100644
--- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/mongo/MongoDBAtlasVectorStoreAutoConfigurationIT.java
+++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/mongo/MongoDBAtlasVectorStoreAutoConfigurationIT.java
@@ -18,13 +18,10 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.ai.autoconfigure.vectorstore.observation.ObservationTestUtil.assertObservationRegistry;
-import java.time.Duration;
import java.util.Collections;
import java.util.List;
-import java.util.Map;
import java.util.stream.Collectors;
-import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
import org.springframework.ai.autoconfigure.openai.OpenAiAutoConfiguration;
@@ -33,7 +30,6 @@
import org.springframework.ai.observation.conventions.VectorStoreProvider;
import org.springframework.ai.vectorstore.SearchRequest;
import org.springframework.ai.vectorstore.VectorStore;
-import org.springframework.ai.vectorstore.filter.Filter;
import org.springframework.ai.vectorstore.filter.FilterExpressionBuilder;
import org.springframework.ai.vectorstore.observation.VectorStoreObservationContext;
import org.springframework.boot.autoconfigure.AutoConfigurations;
@@ -44,12 +40,11 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import io.micrometer.observation.tck.TestObservationRegistry;
+import org.testcontainers.mongodb.MongoDBAtlasLocalContainer;
/**
* @author Eddú Meléndez
@@ -62,12 +57,7 @@
class MongoDBAtlasVectorStoreAutoConfigurationIT {
@Container
- static GenericContainer> mongo = new GenericContainer<>("mongodb/atlas:v1.24.0").withPrivilegedMode(true)
- .withCommand("/bin/bash", "-c",
- "atlas deployments setup local-test --type local --port 27778 --bindIpAll --username root --password root --force && tail -f /dev/null")
- .withExposedPorts(27778)
- .waitingFor(Wait.forLogMessage(".*Deployment created!.*\\n", 1))
- .withStartupTimeout(Duration.ofMinutes(5));
+ static MongoDBAtlasLocalContainer mongo = new MongoDBAtlasLocalContainer("mongodb/mongodb-atlas-local:7.0.9");
List documents = List.of(
new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!",
@@ -94,9 +84,7 @@ class MongoDBAtlasVectorStoreAutoConfigurationIT {
// "spring.ai.vectorstore.mongodb.path-name=testembedding",
"spring.ai.vectorstore.mongodb.index-name=text_index",
"spring.ai.openai.api-key=" + System.getenv("OPENAI_API_KEY"),
- String.format(
- "spring.data.mongodb.uri=" + String.format("mongodb://root:root@%s:%s/?directConnection=true",
- mongo.getHost(), mongo.getMappedPort(27778))));
+ String.format("spring.data.mongodb.uri=" + mongo.getConnectionString()));
@Test
public void addAndSearch() {
diff --git a/vector-stores/spring-ai-mongodb-atlas-store/pom.xml b/vector-stores/spring-ai-mongodb-atlas-store/pom.xml
index 3bd7a4b9441..c9bde10489e 100644
--- a/vector-stores/spring-ai-mongodb-atlas-store/pom.xml
+++ b/vector-stores/spring-ai-mongodb-atlas-store/pom.xml
@@ -53,6 +53,11 @@
org.testcontainers
junit-jupiter
test
+
+ org.testcontainers
+ mongodb
+ 1.20.2
+ test
diff --git a/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/MongoDBAtlasContainer.java b/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/MongoDBAtlasContainer.java
deleted file mode 100644
index 60dfec22f29..00000000000
--- a/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/MongoDBAtlasContainer.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2023 - 2024 the original author or authors.
- *
- * Licensed 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
- *
- * https://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.springframework.ai.vectorstore;
-
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.wait.strategy.Wait;
-
-import java.time.Duration;
-
-public class MongoDBAtlasContainer extends GenericContainer {
-
- public MongoDBAtlasContainer() {
- super("mongodb/atlas:v1.15.1");
- withPrivilegedMode(true);
- withCommand("/bin/bash", "-c",
- "atlas deployments setup local-test --type local --port 27778 --bindIpAll --username root --password root --force && tail -f /dev/null");
- withExposedPorts(27778);
- waitingFor(Wait.forLogMessage(".*Deployment created!.*\\n", 1));
- withStartupTimeout(Duration.ofMinutes(5));
- }
-
- public String getConnectionString() {
- return String.format("mongodb://root:root@%s:%s/?directConnection=true", getHost(), getMappedPort(27778));
- }
-
-}
\ No newline at end of file
diff --git a/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/MongoDBAtlasVectorStoreIT.java b/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/MongoDBAtlasVectorStoreIT.java
index 9215e259675..4b694683f00 100644
--- a/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/MongoDBAtlasVectorStoreIT.java
+++ b/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/MongoDBAtlasVectorStoreIT.java
@@ -36,6 +36,7 @@
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
+import org.testcontainers.mongodb.MongoDBAtlasLocalContainer;
import java.util.Arrays;
import java.util.Collections;
@@ -49,12 +50,14 @@
/**
* @author Chris Smith
* @author Soby Chacko
+ * @author Eddú Meléndez
*/
@Testcontainers
class MongoDBAtlasVectorStoreIT {
@Container
- private static MongoDBAtlasContainer container = new MongoDBAtlasContainer();
+ private static MongoDBAtlasLocalContainer container = new MongoDBAtlasLocalContainer(
+ "mongodb/mongodb-atlas-local:7.0.9");
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withUserConfiguration(TestApplication.class)
diff --git a/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/MongoDbVectorStoreObservationIT.java b/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/MongoDbVectorStoreObservationIT.java
index 8adf17bf0cc..f69c55788d3 100644
--- a/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/MongoDbVectorStoreObservationIT.java
+++ b/vector-stores/spring-ai-mongodb-atlas-store/src/test/java/org/springframework/ai/vectorstore/MongoDbVectorStoreObservationIT.java
@@ -56,18 +56,21 @@
import io.micrometer.observation.ObservationRegistry;
import io.micrometer.observation.tck.TestObservationRegistry;
import io.micrometer.observation.tck.TestObservationRegistryAssert;
+import org.testcontainers.mongodb.MongoDBAtlasLocalContainer;
/**
* @author Christian Tzolov
* @author Soby Chacko
* @author Thomas Vitale
+ * @author Eddú Meléndez
*/
@Testcontainers
@EnabledIfEnvironmentVariable(named = "OPENAI_API_KEY", matches = ".+")
public class MongoDbVectorStoreObservationIT {
@Container
- private static MongoDBAtlasContainer container = new MongoDBAtlasContainer();
+ private static MongoDBAtlasLocalContainer container = new MongoDBAtlasLocalContainer(
+ "mongodb/mongodb-atlas-local:7.0.9");
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withUserConfiguration(Config.class)