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)