Update mavne build with a profile for fast integration tests

- Add new Maven profile 'ci-fast-integration-tests' for running selective ITs
- Remove redundant vector store skip flags from properties section
- Update maven-failsafe-plugin to version 3.5.2
- Configure test exclusions for various components:
  - Most model integration tests (Anthropic and OpenAI)
  - Most vector store tests (except PgVector and Chroma)
  - Most auto-configuration tests
  - All test containers and docker compose tests
  - AI evaluation tests
- Convert the docker-compose tests into ITs
- Convert the testcontainers tests into ITs
- Updated README.md
  - Explain the new profile and also the new integration tests repo
  - Describe ways to run integration tests for specific modules
  - Add badge for https://github.com/spring-projects/spring-ai-integration-tests
This commit is contained in:
Christian Tzolov
2024-11-21 22:43:25 +01:00
committed by Mark Pollack
parent 979de19162
commit d030b82b59
49 changed files with 1485 additions and 579 deletions

View File

@@ -176,25 +176,4 @@
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
<configuration>
<skipITs>${skip.docker-compose}</skipITs>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -20,13 +20,13 @@ import org.junit.jupiter.api.Test;
import org.testcontainers.utility.DockerImageName;
import org.springframework.ai.autoconfigure.vectorstore.chroma.ChromaConnectionDetails;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIT;
import static org.assertj.core.api.Assertions.assertThat;
class ChromaDockerComposeConnectionDetailsFactoryTests extends AbstractDockerComposeIntegrationTests {
class ChromaDockerComposeConnectionDetailsFactoryIT extends AbstractDockerComposeIT {
ChromaDockerComposeConnectionDetailsFactoryTests() {
ChromaDockerComposeConnectionDetailsFactoryIT() {
super("chroma-compose.yaml", DockerImageName.parse("chromadb/chroma"));
}

View File

@@ -20,13 +20,13 @@ import org.junit.jupiter.api.Test;
import org.testcontainers.utility.DockerImageName;
import org.springframework.ai.autoconfigure.vectorstore.chroma.ChromaConnectionDetails;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIT;
import static org.assertj.core.api.Assertions.assertThat;
class ChromaWithTokenDockerComposeConnectionDetailsFactoryTests extends AbstractDockerComposeIntegrationTests {
class ChromaWithTokenDockerComposeConnectionDetailsFactoryIT extends AbstractDockerComposeIT {
ChromaWithTokenDockerComposeConnectionDetailsFactoryTests() {
ChromaWithTokenDockerComposeConnectionDetailsFactoryIT() {
super("chroma-with-token-compose.yaml", DockerImageName.parse("chromadb/chroma"));
}

View File

@@ -20,13 +20,13 @@ import org.junit.jupiter.api.Test;
import org.testcontainers.utility.DockerImageName;
import org.springframework.boot.autoconfigure.mongo.MongoConnectionDetails;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIT;
import static org.assertj.core.api.Assertions.assertThat;
class MongoDbAtlasLocalDockerComposeConnectionDetailsFactoryTests extends AbstractDockerComposeIntegrationTests {
class MongoDbAtlasLocalDockerComposeConnectionDetailsFactoryIT extends AbstractDockerComposeIT {
protected MongoDbAtlasLocalDockerComposeConnectionDetailsFactoryTests() {
protected MongoDbAtlasLocalDockerComposeConnectionDetailsFactoryIT() {
super("mongo-compose.yaml", DockerImageName.parse("mongodb/mongodb-atlas-local"));
}

View File

@@ -20,13 +20,13 @@ import org.junit.jupiter.api.Test;
import org.testcontainers.utility.DockerImageName;
import org.springframework.ai.autoconfigure.ollama.OllamaConnectionDetails;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIT;
import static org.assertj.core.api.Assertions.assertThat;
class OllamaDockerComposeConnectionDetailsFactoryTests extends AbstractDockerComposeIntegrationTests {
class OllamaDockerComposeConnectionDetailsFactoryIT extends AbstractDockerComposeIT {
OllamaDockerComposeConnectionDetailsFactoryTests() {
OllamaDockerComposeConnectionDetailsFactoryIT() {
super("ollama-compose.yaml", DockerImageName.parse("ollama/ollama"));
}

View File

@@ -20,13 +20,13 @@ import org.junit.jupiter.api.Test;
import org.testcontainers.utility.DockerImageName;
import org.springframework.ai.autoconfigure.vectorstore.opensearch.AwsOpenSearchConnectionDetails;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIT;
import static org.assertj.core.api.Assertions.assertThat;
class AwsOpenSearchDockerComposeConnectionDetailsFactoryTests extends AbstractDockerComposeIntegrationTests {
class AwsOpenSearchDockerComposeConnectionDetailsFactoryIT extends AbstractDockerComposeIT {
AwsOpenSearchDockerComposeConnectionDetailsFactoryTests() {
AwsOpenSearchDockerComposeConnectionDetailsFactoryIT() {
super("localstack-compose.yaml", DockerImageName.parse("localstack/localstack:3.5.0"));
}

View File

@@ -20,13 +20,13 @@ import org.junit.jupiter.api.Test;
import org.testcontainers.utility.DockerImageName;
import org.springframework.ai.autoconfigure.vectorstore.opensearch.OpenSearchConnectionDetails;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIT;
import static org.assertj.core.api.Assertions.assertThat;
class OpenSearchDockerComposeConnectionDetailsFactoryTests extends AbstractDockerComposeIntegrationTests {
class OpenSearchDockerComposeConnectionDetailsFactoryIT extends AbstractDockerComposeIT {
OpenSearchDockerComposeConnectionDetailsFactoryTests() {
OpenSearchDockerComposeConnectionDetailsFactoryIT() {
super("opensearch-compose.yaml", DockerImageName.parse("opensearchproject/opensearch"));
}

View File

@@ -20,13 +20,13 @@ import org.junit.jupiter.api.Test;
import org.testcontainers.utility.DockerImageName;
import org.springframework.ai.autoconfigure.vectorstore.qdrant.QdrantConnectionDetails;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIT;
import static org.assertj.core.api.Assertions.assertThat;
class QdrantDockerComposeConnectionDetailsFactoryTests extends AbstractDockerComposeIntegrationTests {
class QdrantDockerComposeConnectionDetailsFactoryIT extends AbstractDockerComposeIT {
QdrantDockerComposeConnectionDetailsFactoryTests() {
QdrantDockerComposeConnectionDetailsFactoryIT() {
super("qdrant-compose.yaml", DockerImageName.parse("qdrant/qdrant"));
}

View File

@@ -20,13 +20,13 @@ import org.junit.jupiter.api.Test;
import org.testcontainers.utility.DockerImageName;
import org.springframework.ai.autoconfigure.vectorstore.typesense.TypesenseConnectionDetails;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIT;
import static org.assertj.core.api.Assertions.assertThat;
class TypesenseDockerComposeConnectionDetailsFactoryTests extends AbstractDockerComposeIntegrationTests {
class TypesenseDockerComposeConnectionDetailsFactoryIT extends AbstractDockerComposeIT {
TypesenseDockerComposeConnectionDetailsFactoryTests() {
TypesenseDockerComposeConnectionDetailsFactoryIT() {
super("typesense-compose.yaml", DockerImageName.parse("typesense/typesense:26.0"));
}

View File

@@ -20,13 +20,13 @@ import org.junit.jupiter.api.Test;
import org.testcontainers.utility.DockerImageName;
import org.springframework.ai.autoconfigure.vectorstore.weaviate.WeaviateConnectionDetails;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIntegrationTests;
import org.springframework.boot.docker.compose.service.connection.test.AbstractDockerComposeIT;
import static org.assertj.core.api.Assertions.assertThat;
class WeaviateDockerComposeConnectionDetailsFactoryTests extends AbstractDockerComposeIntegrationTests {
class WeaviateDockerComposeConnectionDetailsFactoryIT extends AbstractDockerComposeIT {
WeaviateDockerComposeConnectionDetailsFactoryTests() {
WeaviateDockerComposeConnectionDetailsFactoryIT() {
super("weaviate-compose.yaml", DockerImageName.parse("semitechnologies/weaviate"));
}

View File

@@ -51,7 +51,7 @@ import static org.assertj.core.api.Assertions.fail;
*/
@DisabledIfProcessUnavailable({ "docker", "version" })
@DisabledIfProcessUnavailable({ "docker", "compose" })
public abstract class AbstractDockerComposeIntegrationTests {
public abstract class AbstractDockerComposeIT {
@TempDir
private static Path tempDir;
@@ -60,7 +60,7 @@ public abstract class AbstractDockerComposeIntegrationTests {
private final DockerImageName dockerImageName;
protected AbstractDockerComposeIntegrationTests(String composeResource, DockerImageName dockerImageName) {
protected AbstractDockerComposeIT(String composeResource, DockerImageName dockerImageName) {
this.composeResource = new ClassPathResource(composeResource, getClass());
this.dockerImageName = dockerImageName;
}