1
1
package org .testcontainers .chromadb ;
2
2
3
+ import lombok .extern .slf4j .Slf4j ;
3
4
import org .testcontainers .containers .GenericContainer ;
4
5
import org .testcontainers .containers .wait .strategy .Wait ;
6
+ import org .testcontainers .utility .ComparableVersion ;
5
7
import org .testcontainers .utility .DockerImageName ;
6
8
7
9
/**
11
13
* <p>
12
14
* Exposed ports: 8000
13
15
*/
16
+ @ Slf4j
14
17
public class ChromaDBContainer extends GenericContainer <ChromaDBContainer > {
15
18
16
19
private static final DockerImageName DEFAULT_DOCKER_IMAGE = DockerImageName .parse ("chromadb/chroma" );
@@ -22,13 +25,32 @@ public ChromaDBContainer(String dockerImageName) {
22
25
}
23
26
24
27
public ChromaDBContainer (DockerImageName dockerImageName ) {
28
+ this (dockerImageName , isVersion2 (dockerImageName .getVersionPart ()));
29
+ }
30
+
31
+ public ChromaDBContainer (DockerImageName dockerImageName , boolean isVersion2 ) {
25
32
super (dockerImageName );
33
+ String apiPath = isVersion2 ? "/api/v2/heartbeat" : "/api/v1/heartbeat" ;
26
34
dockerImageName .assertCompatibleWith (DEFAULT_DOCKER_IMAGE , GHCR_DOCKER_IMAGE );
27
35
withExposedPorts (8000 );
28
- waitingFor (Wait .forHttp ("/api/v1/heartbeat" ));
36
+ waitingFor (Wait .forHttp (apiPath ));
29
37
}
30
38
31
39
public String getEndpoint () {
32
40
return "http://" + getHost () + ":" + getFirstMappedPort ();
33
41
}
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
+ }
34
56
}
0 commit comments