Skip to content

Commit 1a71125

Browse files
Support new chromadb api version (#10170)
Co-authored-by: Eddú Meléndez Gonzales <[email protected]>
1 parent 037eedb commit 1a71125

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

modules/chromadb/src/main/java/org/testcontainers/chromadb/ChromaDBContainer.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.testcontainers.chromadb;
22

3+
import lombok.extern.slf4j.Slf4j;
34
import org.testcontainers.containers.GenericContainer;
45
import org.testcontainers.containers.wait.strategy.Wait;
6+
import org.testcontainers.utility.ComparableVersion;
57
import org.testcontainers.utility.DockerImageName;
68

79
/**
@@ -11,6 +13,7 @@
1113
* <p>
1214
* Exposed ports: 8000
1315
*/
16+
@Slf4j
1417
public class ChromaDBContainer extends GenericContainer<ChromaDBContainer> {
1518

1619
private static final DockerImageName DEFAULT_DOCKER_IMAGE = DockerImageName.parse("chromadb/chroma");
@@ -22,13 +25,32 @@ public ChromaDBContainer(String dockerImageName) {
2225
}
2326

2427
public ChromaDBContainer(DockerImageName dockerImageName) {
28+
this(dockerImageName, isVersion2(dockerImageName.getVersionPart()));
29+
}
30+
31+
public ChromaDBContainer(DockerImageName dockerImageName, boolean isVersion2) {
2532
super(dockerImageName);
33+
String apiPath = isVersion2 ? "/api/v2/heartbeat" : "/api/v1/heartbeat";
2634
dockerImageName.assertCompatibleWith(DEFAULT_DOCKER_IMAGE, GHCR_DOCKER_IMAGE);
2735
withExposedPorts(8000);
28-
waitingFor(Wait.forHttp("/api/v1/heartbeat"));
36+
waitingFor(Wait.forHttp(apiPath));
2937
}
3038

3139
public String getEndpoint() {
3240
return "http://" + getHost() + ":" + getFirstMappedPort();
3341
}
42+
43+
private static boolean isVersion2(String version) {
44+
if (version.equals("latest")) {
45+
return true;
46+
}
47+
48+
ComparableVersion comparableVersion = new ComparableVersion(version);
49+
if (comparableVersion.isGreaterThanOrEqualTo("1.0.0")) {
50+
return true;
51+
}
52+
53+
log.warn("Version {} is less than 1.0.0 or not a semantic version.", version);
54+
return false;
55+
}
3456
}

modules/chromadb/src/test/java/org/testcontainers/chromadb/ChromaDBContainerTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,22 @@ public void test() {
2727
given().baseUri(chroma.getEndpoint()).when().get("/api/v1/databases/test").then().statusCode(200);
2828
}
2929
}
30+
31+
@Test
32+
public void testVersion2() {
33+
try (ChromaDBContainer chroma = new ChromaDBContainer("chromadb/chroma:1.0.0")) {
34+
chroma.start();
35+
36+
given()
37+
.baseUri(chroma.getEndpoint())
38+
.when()
39+
.body("{\"name\": \"test\"}")
40+
.contentType(ContentType.JSON)
41+
.post("/api/v2/tenants")
42+
.then()
43+
.statusCode(200);
44+
45+
given().baseUri(chroma.getEndpoint()).when().get("/api/v2/tenants/test").then().statusCode(200);
46+
}
47+
}
3048
}

0 commit comments

Comments
 (0)