Skip to content

Commit c9f04c3

Browse files
committedApr 24, 2018
Avoid race between container starting and getting mapped port
1 parent f6cc1cb commit c9f04c3

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed
 

‎spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/CassandraContainer.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,18 @@ public class CassandraContainer extends Container {
3838
private static final int PORT = 9042;
3939

4040
public CassandraContainer() {
41-
super("cassandra:3.11.1", PORT, (container) -> container
42-
.waitingFor(new WaitStrategy(container.getMappedPort(PORT)))
43-
.withStartupAttempts(3).withStartupTimeout(Duration.ofSeconds(60)));
41+
super("cassandra:3.11.1", PORT,
42+
(container) -> container.waitingFor(new WaitStrategy(container))
43+
.withStartupAttempts(3)
44+
.withStartupTimeout(Duration.ofSeconds(60)));
4445
}
4546

4647
private static final class WaitStrategy extends HostPortWaitStrategy {
4748

48-
private final int port;
49+
private final GenericContainer<?> container;
4950

50-
private WaitStrategy(int port) {
51-
this.port = port;
51+
private WaitStrategy(GenericContainer<?> container) {
52+
this.container = container;
5253
}
5354

5455
@Override
@@ -66,7 +67,8 @@ public void waitUntilReady() {
6667

6768
private Callable<Boolean> checkConnection() {
6869
return () -> {
69-
try (Cluster cluster = Cluster.builder().withPort(this.port)
70+
try (Cluster cluster = Cluster.builder()
71+
.withPort(this.container.getMappedPort(CassandraContainer.PORT))
7072
.addContactPoint("localhost").build()) {
7173
cluster.connect();
7274
return true;

‎spring-boot-project/spring-boot-tools/spring-boot-test-support/src/main/java/org/springframework/boot/testsupport/testcontainers/Neo4jContainer.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -37,25 +37,25 @@ public class Neo4jContainer extends Container {
3737
private static final int PORT = 7687;
3838

3939
public Neo4jContainer() {
40-
super("neo4j:3.3.1", PORT,
41-
(container) -> container
42-
.waitingFor(new WaitStrategy(container.getMappedPort(PORT)))
43-
.withEnv("NEO4J_AUTH", "none"));
40+
super("neo4j:3.3.1", PORT, (container) -> container
41+
.waitingFor(new WaitStrategy(container)).withEnv("NEO4J_AUTH", "none"));
4442
}
4543

4644
private static final class WaitStrategy extends HostPortWaitStrategy {
4745

48-
private final int port;
46+
private final GenericContainer<?> container;
4947

50-
private WaitStrategy(int port) {
51-
this.port = port;
48+
private WaitStrategy(GenericContainer<?> container) {
49+
this.container = container;
5250
}
5351

5452
@Override
5553
public void waitUntilReady() {
5654
super.waitUntilReady();
5755
Configuration configuration = new Configuration.Builder()
58-
.uri("bolt://localhost:" + this.port).build();
56+
.uri("bolt://localhost:"
57+
+ this.container.getMappedPort(Neo4jContainer.PORT))
58+
.build();
5959
SessionFactory sessionFactory = new SessionFactory(configuration,
6060
"org.springframework.boot.test.autoconfigure.data.neo4j");
6161
try {

0 commit comments

Comments
 (0)