Skip to content

Commit 3aadf3b

Browse files
committed
Use Testcontainers for CI builds.
See #1503
1 parent 25352b8 commit 3aadf3b

24 files changed

+158
-156
lines changed

Jenkinsfile

+35-26
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,6 @@ pipeline {
1818
}
1919

2020
stages {
21-
stage("Docker images") {
22-
parallel {
23-
stage('Publish JDK 17 + Cassandra 5') {
24-
when {
25-
anyOf {
26-
changeset "ci/openjdk17-cassandra-5/**"
27-
changeset "ci/pipeline.properties"
28-
}
29-
}
30-
agent { label 'data' }
31-
options { timeout(time: 30, unit: 'MINUTES') }
32-
steps {
33-
script {
34-
def image = docker.build("springci/spring-data-with-cassandra-5:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg CASSANDRA=${p['docker.cassandra.3.version']} ci/openjdk17-cassandra-5/")
35-
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
36-
image.push()
37-
}
38-
}
39-
}
40-
}
41-
}
42-
}
4321

4422
stage("test: baseline (main)") {
4523
when {
@@ -60,18 +38,49 @@ pipeline {
6038
steps {
6139
script {
6240
docker.withRegistry(p['docker.proxy.registry'], p['docker.proxy.credentials']) {
63-
docker.image("springci/spring-data-with-cassandra-5:${p['java.main.tag']}").inside(p['docker.java.inside.docker']) {
64-
sh 'mkdir -p /tmp/jenkins-home'
65-
sh 'JAVA_HOME=/opt/java/openjdk17 /opt/cassandra/bin/cassandra -R &'
41+
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.docker']) {
6642
sh 'MAVEN_OPTS="-Duser.name=' + "${p['jenkins.user.name']}" + ' -Duser.home=/tmp/jenkins-home" ' +
67-
"./mvnw -s settings.xml -Pci,external-cassandra -Ddevelocity.storage.directory=/tmp/jenkins-home/.develocity-root -Dmaven.repo.local=/tmp/jenkins-home/.m2/spring-data-cassandra " +
43+
"./mvnw -s settings.xml -Pci,testcontainers-cassandra -Ddevelocity.storage.directory=/tmp/jenkins-home/.develocity-root -Dmaven.repo.local=/tmp/jenkins-home/.m2/spring-data-cassandra " +
6844
"clean dependency:list verify -Dsort -U -B"
6945
}
7046
}
7147
}
7248
}
7349
}
7450

51+
stage("Test other configurations") {
52+
when {
53+
beforeAgent(true)
54+
allOf {
55+
branch(pattern: "main|(\\d\\.\\d\\.x)", comparator: "REGEXP")
56+
not { triggeredBy 'UpstreamCause' }
57+
}
58+
}
59+
parallel {
60+
stage("test: baseline (next)") {
61+
agent {
62+
label 'data'
63+
}
64+
options { timeout(time: 30, unit: 'MINUTES') }
65+
environment {
66+
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
67+
DEVELOCITY_ACCESS_KEY = credentials("${p['develocity.access-key']}")
68+
}
69+
steps {
70+
script {
71+
docker.withRegistry(p['docker.proxy.registry'], p['docker.proxy.credentials']) {
72+
docker.image(p['docker.java.next.image']).inside(p['docker.java.inside.docker']) {
73+
sh 'MAVEN_OPTS="-Duser.name=' + "${p['jenkins.user.name']}" + ' -Duser.home=/tmp/jenkins-home" ' +
74+
"./mvnw -s settings.xml -Pci,testcontainers-cassandra -Ddevelocity.storage.directory=/tmp/jenkins-home/.develocity-root -Dmaven.repo.local=/tmp/jenkins-home/.m2/spring-data-cassandra " +
75+
"clean dependency:list verify -Dsort -U -B"
76+
}
77+
}
78+
}
79+
}
80+
}
81+
}
82+
}
83+
7584
stage('Release to artifactory') {
7685
when {
7786
beforeAgent(true)

ci/openjdk17-cassandra-5/Dockerfile

-26
This file was deleted.

ci/pipeline.properties

-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ docker.mongodb.8.0.version=8.0.0
1717
docker.redis.6.version=6.2.13
1818
docker.redis.7.version=7.2.4
1919

20-
# Supported versions of Cassandra
21-
docker.cassandra.5.version=5.0.3
22-
2320
# Docker environment settings
2421
docker.java.inside.basic=-v $HOME:/tmp/jenkins-home
2522
docker.java.inside.docker=-u root -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v $HOME:/tmp/jenkins-home

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/config/AbstractSessionConfigurationIntegrationTests.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919

2020
import org.junit.jupiter.api.Test;
2121
import org.junit.jupiter.api.extension.ExtendWith;
22+
2223
import org.springframework.core.io.ClassPathResource;
2324
import org.springframework.core.io.Resource;
24-
import org.springframework.data.cassandra.support.CassandraConnectionProperties;
2525
import org.springframework.data.cassandra.test.util.CassandraExtension;
2626
import org.springframework.lang.Nullable;
2727

@@ -69,7 +69,12 @@ protected String getKeyspaceName() {
6969

7070
@Override
7171
protected int getPort() {
72-
return new CassandraConnectionProperties().getCassandraPort();
72+
return CassandraExtension.getResources().getPort();
73+
}
74+
75+
@Override
76+
protected String getContactPoints() {
77+
return CassandraExtension.getResources().getHost();
7378
}
7479

7580
@Nullable

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/config/CqlTemplateConfigIntegrationTests.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717

1818
import static org.assertj.core.api.Assertions.*;
1919

20-
import org.junit.After;
20+
import org.junit.jupiter.api.AfterEach;
2121
import org.junit.jupiter.api.BeforeEach;
2222
import org.junit.jupiter.api.Test;
23+
2324
import org.springframework.context.ConfigurableApplicationContext;
2425
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
2526
import org.springframework.context.annotation.Configuration;
@@ -51,6 +52,10 @@ protected int getPort() {
5152
return CassandraExtension.getResources().getPort();
5253
}
5354

55+
@Override
56+
protected String getContactPoints() {
57+
return CassandraExtension.getResources().getHost();
58+
}
5459
}
5560

5661
private CqlSession session;
@@ -63,7 +68,7 @@ void setUp() {
6368
this.session = context.getBean(CqlSession.class);
6469
}
6570

66-
@After
71+
@AfterEach
6772
void tearDown() {
6873
context.close();
6974
}

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/config/MinimalXmlConfigIntegrationTests.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@
1717

1818
import static org.assertj.core.api.Assertions.*;
1919

20-
import org.junit.After;
20+
import org.junit.jupiter.api.AfterEach;
2121
import org.junit.jupiter.api.BeforeEach;
2222
import org.junit.jupiter.api.Test;
23+
2324
import org.springframework.context.ConfigurableApplicationContext;
2425
import org.springframework.context.support.ClassPathXmlApplicationContext;
2526
import org.springframework.data.cassandra.core.CassandraOperations;
@@ -49,7 +50,7 @@ void setUp() {
4950
this.session = context.getBean(CqlSession.class);
5051
}
5152

52-
@After
53+
@AfterEach
5354
void tearDown() {
5455
context.close();
5556
}

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/observability/ImperativeIntegrationTests.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@
1818
import static org.assertj.core.api.Assertions.*;
1919

2020
import io.micrometer.core.instrument.MeterRegistry;
21-
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
2221
import io.micrometer.observation.ObservationRegistry;
2322
import io.micrometer.tracing.exporter.FinishedSpan;
2423
import io.micrometer.tracing.test.SampleTestRunner;
2524

2625
import org.junit.jupiter.api.extension.ExtendWith;
26+
2727
import org.springframework.beans.factory.annotation.Autowired;
2828
import org.springframework.data.cassandra.core.cql.CqlTemplate;
2929
import org.springframework.data.cassandra.test.util.CassandraExtension;
@@ -38,7 +38,7 @@
3838
* @author Greg Turnquist
3939
* @author Mark Paluch
4040
*/
41-
@ExtendWith({ SpringExtension.class, CassandraExtension.class })
41+
@ExtendWith({ CassandraExtension.class, SpringExtension.class })
4242
@ContextConfiguration(classes = TestConfig.class)
4343
public class ImperativeIntegrationTests extends SampleTestRunner {
4444

@@ -76,8 +76,6 @@ public SampleTestRunnerConsumer yourCode() {
7676

7777
template.execute("INSERT INTO person (id,firstName,lastName) VALUES(?,?,?)", 1, "Walter", "White");
7878

79-
System.out.println(((SimpleMeterRegistry) meterRegistry).getMetersAsString());
80-
8179
assertThat(tracer.getFinishedSpans()).hasSizeGreaterThanOrEqualTo(5);
8280

8381
for (FinishedSpan finishedSpan : tracer.getFinishedSpans()) {
@@ -88,4 +86,5 @@ public SampleTestRunnerConsumer yourCode() {
8886
}
8987
};
9088
}
89+
9190
}

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/observability/ReactiveIntegrationTests.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import static org.assertj.core.api.Assertions.*;
1919

2020
import io.micrometer.core.instrument.MeterRegistry;
21-
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
2221
import io.micrometer.observation.Observation;
2322
import io.micrometer.observation.ObservationRegistry;
2423
import io.micrometer.observation.contextpropagation.ObservationThreadLocalAccessor;
@@ -42,7 +41,7 @@
4241
*
4342
* @author Mark Paluch
4443
*/
45-
@ExtendWith({ SpringExtension.class, CassandraExtension.class })
44+
@ExtendWith({ CassandraExtension.class, SpringExtension.class })
4645
@ContextConfiguration(classes = TestConfig.class)
4746
public class ReactiveIntegrationTests extends SampleTestRunner {
4847

@@ -88,9 +87,8 @@ public SampleTestRunnerConsumer yourCode() {
8887
.verifyComplete();
8988
});
9089

91-
System.out.println(((SimpleMeterRegistry) meterRegistry).getMetersAsString());
92-
9390
assertThat(tracer.getFinishedSpans()).hasSizeGreaterThanOrEqualTo(5);
9491
};
9592
}
93+
9694
}

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/repository/cdi/CassandraOperationsProducer.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
import org.springframework.data.cassandra.core.mapping.CassandraPersistentEntity;
3636
import org.springframework.data.cassandra.core.mapping.SimpleUserTypeResolver;
3737
import org.springframework.data.cassandra.domain.User;
38-
import org.springframework.data.cassandra.support.CassandraConnectionProperties;
3938
import org.springframework.data.cassandra.support.RandomKeyspaceName;
39+
import org.springframework.data.cassandra.test.util.CassandraExtension;
4040

4141
import com.datastax.oss.driver.api.core.CqlIdentifier;
4242
import com.datastax.oss.driver.api.core.CqlSession;
@@ -51,10 +51,11 @@ class CassandraOperationsProducer {
5151
@Produces
5252
@Singleton
5353
public CqlSession createSession() throws Exception {
54-
CassandraConnectionProperties properties = new CassandraConnectionProperties();
54+
55+
CassandraExtension.Resources resources = CassandraExtension.getResources();
5556

5657
return CqlSession.builder().addContactPoint(
57-
InetSocketAddress.createUnresolved(properties.getCassandraHost(), properties.getCassandraPort())).build();
58+
InetSocketAddress.createUnresolved(resources.getHost(), resources.getPort())).build();
5859
}
5960

6061
@Produces

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/repository/cdi/CdiRepositoryTests.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@
2222

2323
import java.util.Optional;
2424

25-
import org.junit.AfterClass;
25+
import org.junit.jupiter.api.AfterAll;
2626
import org.junit.jupiter.api.BeforeAll;
2727
import org.junit.jupiter.api.BeforeEach;
2828
import org.junit.jupiter.api.Test;
29+
2930
import org.springframework.data.cassandra.domain.User;
3031
import org.springframework.data.cassandra.test.util.IntegrationTestsSupport;
3132

@@ -54,7 +55,7 @@ static void init() throws Exception {
5455
.initialize();
5556
}
5657

57-
@AfterClass
58+
@AfterAll
5859
static void shutdown() throws Exception {
5960
cdiContainer.close();
6061
}

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/repository/support/IntegrationTestConfig.java

+7-5
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
import org.springframework.data.cassandra.config.SchemaAction;
2929
import org.springframework.data.cassandra.core.cql.keyspace.CreateKeyspaceSpecification;
3030
import org.springframework.data.cassandra.core.cql.keyspace.DropKeyspaceSpecification;
31-
import org.springframework.data.cassandra.support.CassandraConnectionProperties;
3231
import org.springframework.data.cassandra.support.RandomKeyspaceName;
32+
import org.springframework.data.cassandra.test.util.CassandraExtension;
3333

3434
/**
3535
* Setup any spring configuration for unit tests
@@ -41,14 +41,16 @@
4141
@Configuration
4242
public class IntegrationTestConfig extends AbstractReactiveCassandraConfiguration {
4343

44-
private static final CassandraConnectionProperties PROPS = new CassandraConnectionProperties();
45-
private static final int PORT = PROPS.getCassandraPort();
46-
4744
private String keyspaceName = RandomKeyspaceName.create();
4845

4946
@Override
5047
protected int getPort() {
51-
return PORT;
48+
return CassandraExtension.getResources().getPort();
49+
}
50+
51+
@Override
52+
protected String getContactPoints() {
53+
return CassandraExtension.getResources().getHost();
5254
}
5355

5456
@Bean

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/support/AbstractTestJavaConfig.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import org.springframework.context.annotation.Configuration;
1919
import org.springframework.data.cassandra.config.AbstractSessionConfiguration;
20+
import org.springframework.data.cassandra.test.util.CassandraExtension;
2021

2122
/**
2223
* Java-based configuration for integration tests using defaults for a smooth test run.
@@ -27,11 +28,13 @@
2728
@Configuration
2829
public abstract class AbstractTestJavaConfig extends AbstractSessionConfiguration {
2930

30-
private static final CassandraConnectionProperties PROPERTIES = new CassandraConnectionProperties();
31-
3231
@Override
3332
protected int getPort() {
34-
return PROPERTIES.getCassandraPort();
33+
return CassandraExtension.getResources().getPort();
3534
}
3635

36+
@Override
37+
protected String getContactPoints() {
38+
return CassandraExtension.getResources().getHost();
39+
}
3740
}

spring-data-cassandra/src/test/java/org/springframework/data/cassandra/support/CassandraConnectionProperties.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,10 @@ private void loadProperties(String resourceName) {
107107
@Override
108108
public String getProperty(String key) {
109109

110-
String value = super.getProperty(key);
110+
String value = System.getProperty(key);
111111

112112
if (value == null) {
113-
value = System.getProperty(key);
113+
value = super.getProperty(key);
114114
}
115115

116116
return value;

0 commit comments

Comments
 (0)