diff --git a/modules/qdrant/src/main/java/org/testcontainers/qdrant/QdrantContainer.java b/modules/qdrant/src/main/java/org/testcontainers/qdrant/QdrantContainer.java index 341349fe18c..da991dbf265 100644 --- a/modules/qdrant/src/main/java/org/testcontainers/qdrant/QdrantContainer.java +++ b/modules/qdrant/src/main/java/org/testcontainers/qdrant/QdrantContainer.java @@ -3,22 +3,32 @@ import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.utility.DockerImageName; +import org.testcontainers.utility.MountableFile; /** * Testcontainers implementation for Qdrant. - *

- * Supported image: {@code qdrant/qdrant} - *

- * Exposed ports: + * + *

Supported image: {@code qdrant/qdrant} + * + *

Exposed ports: + * *

*/ public class QdrantContainer extends GenericContainer { private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("qdrant/qdrant"); + private final int QDRANT_REST_PORT = 6333; + + private final int QDRANT_GRPC_PORT = 6334; + + private final String CONFIG_FILE_PATH = "/qdrant/config/config.yaml"; + + private final String API_KEY_ENV = "QDRANT__SERVICE__API_KEY"; + public QdrantContainer(String image) { this(DockerImageName.parse(image)); } @@ -26,11 +36,31 @@ public QdrantContainer(String image) { public QdrantContainer(DockerImageName dockerImageName) { super(dockerImageName); dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME); - withExposedPorts(6333, 6334); - waitingFor(Wait.forHttp("/readyz").forPort(6333)); + withExposedPorts(QDRANT_REST_PORT, QDRANT_GRPC_PORT); + waitingFor(Wait.forHttp("/readyz").forPort(QDRANT_REST_PORT)); + } + + public QdrantContainer withApiKey(String apiKey) { + return withEnv(API_KEY_ENV, apiKey); + } + + public QdrantContainer withConfigFile(MountableFile configFile) { + return withCopyFileToContainer(configFile, CONFIG_FILE_PATH); + } + + public int getHttpPort() { + return getMappedPort(QDRANT_REST_PORT); + } + + public int getGrpcPort() { + return getMappedPort(QDRANT_GRPC_PORT); + } + + public String getRestHostAddress() { + return getHost() + ":" + getHttpPort(); } public String getGrpcHostAddress() { - return getHost() + ":" + getMappedPort(6334); + return getHost() + ":" + getGrpcPort(); } } diff --git a/modules/qdrant/src/test/java/org/testcontainers/qdrant/QdrantContainerTest.java b/modules/qdrant/src/test/java/org/testcontainers/qdrant/QdrantContainerTest.java index e33582bf552..55f6559f001 100644 --- a/modules/qdrant/src/test/java/org/testcontainers/qdrant/QdrantContainerTest.java +++ b/modules/qdrant/src/test/java/org/testcontainers/qdrant/QdrantContainerTest.java @@ -1,14 +1,15 @@ package org.testcontainers.qdrant; -import io.grpc.Grpc; -import io.grpc.InsecureChannelCredentials; +import io.qdrant.client.QdrantClient; import io.qdrant.client.QdrantGrpcClient; import io.qdrant.client.grpc.QdrantOuterClass; import org.junit.Test; +import java.util.UUID; import java.util.concurrent.ExecutionException; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertThrows; public class QdrantContainerTest { @@ -21,16 +22,38 @@ public void test() throws ExecutionException, InterruptedException { ) { qdrant.start(); - QdrantGrpcClient client = QdrantGrpcClient - .newBuilder( - Grpc.newChannelBuilder(qdrant.getGrpcHostAddress(), InsecureChannelCredentials.create()).build() - ) - .build(); - QdrantOuterClass.HealthCheckReply healthCheckReply = client - .qdrant() - .healthCheck(QdrantOuterClass.HealthCheckRequest.getDefaultInstance()) - .get(); + QdrantClient client = new QdrantClient( + QdrantGrpcClient.newBuilder(qdrant.getHost(), qdrant.getGrpcPort(), false).build() + ); + QdrantOuterClass.HealthCheckReply healthCheckReply = client.healthCheckAsync().get(); assertThat(healthCheckReply.getVersion()).isEqualTo("1.7.4"); + + client.close(); + } + } + + @Test + public void testApiKey() throws ExecutionException, InterruptedException { + String apiKey = UUID.randomUUID().toString(); + try (QdrantContainer qdrant = new QdrantContainer("qdrant/qdrant:v1.7.4").withApiKey(apiKey)) { + qdrant.start(); + + final QdrantClient unauthClient = new QdrantClient( + QdrantGrpcClient.newBuilder(qdrant.getHost(), qdrant.getGrpcPort(), false).build() + ); + + assertThrows(ExecutionException.class, () -> unauthClient.healthCheckAsync().get()); + + unauthClient.close(); + + final QdrantClient client = new QdrantClient( + QdrantGrpcClient.newBuilder(qdrant.getHost(), qdrant.getGrpcPort(), false).withApiKey(apiKey).build() + ); + + QdrantOuterClass.HealthCheckReply healthCheckReply = client.healthCheckAsync().get(); + assertThat(healthCheckReply.getVersion()).isEqualTo("1.7.4"); + + client.close(); } } }