Skip to content

Commit 24e1564

Browse files
committed
Refine Testcontainer setup for Cassandra 5 startup.
The container version is picked up from the env-variable first and then from our project properties. Adding config file for v5. See #1503
1 parent b02492f commit 24e1564

File tree

2 files changed

+2243
-3
lines changed

2 files changed

+2243
-3
lines changed

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/test/util/CassandraDelegate.java

+16-3
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,18 @@
2424

2525
import org.slf4j.Logger;
2626
import org.slf4j.LoggerFactory;
27+
2728
import org.springframework.data.cassandra.core.cql.SessionCallback;
2829
import org.springframework.data.cassandra.support.CassandraConnectionProperties;
2930
import org.springframework.data.cassandra.support.CqlDataSet;
31+
import org.springframework.data.util.Optionals;
3032
import org.springframework.lang.NonNull;
3133
import org.springframework.util.Assert;
3234
import org.springframework.util.StringUtils;
35+
3336
import org.testcontainers.containers.CassandraContainer;
37+
import org.testcontainers.utility.DockerImageName;
38+
import org.testcontainers.utility.MountableFile;
3439

3540
import com.datastax.oss.driver.api.core.CqlIdentifier;
3641
import com.datastax.oss.driver.api.core.CqlSession;
@@ -273,6 +278,14 @@ private void runTestcontainerCassandra() {
273278

274279
container = getCassandraDockerImageName().map(CassandraContainer::new).orElseGet(CassandraContainer::new);
275280

281+
DockerImageName imageName = DockerImageName.parse(container.getDockerImageName());
282+
String versionPart = imageName.getVersionPart();
283+
Version version = Version.parse(versionPart);
284+
285+
if (version.getMajor() >= 5) {
286+
container.withCopyToContainer(MountableFile.forClasspathResource("testcontainer-cassandra-v5.yaml"),
287+
"/etc/cassandra/cassandra.yaml");
288+
}
276289
container.start();
277290

278291
log.info("Running with Cassandra Docker Testcontainer Image Name [{}]", container.getDockerImageName());
@@ -290,8 +303,8 @@ private Optional<String> getCassandraDockerImageName() {
290303

291304
private Optional<String> resolveCassandraVersion() {
292305

293-
return Optional.ofNullable(System.getProperty("cassandra.version", System.getenv("CASSANDRA_VERSION")))
294-
.filter(StringUtils::hasText);
306+
return Optionals.firstNonEmpty(() -> Optional.ofNullable(System.getenv("CASSANDRA_VERSION")),
307+
() -> Optional.ofNullable(System.getProperty("cassandra.version"))).filter(StringUtils::hasText);
295308
}
296309

297310
private synchronized void initializeConnection() {
@@ -392,7 +405,7 @@ private void executeAfterHooks() {
392405

393406
private synchronized void releaseConnection() {
394407

395-
if (resourceHolder == null) {
408+
if (resourceHolder == null && this.session != null) {
396409
this.session.close();
397410
}
398411

0 commit comments

Comments
 (0)