From d2e15df9e466f1df8600bc32bfd7e30ed0b28de7 Mon Sep 17 00:00:00 2001 From: Stefan Scheidt Date: Mon, 13 May 2024 16:21:00 +0200 Subject: [PATCH] Let PostgeSQLContainer also wait for listening port In some situations, TestContainers think PostgreSQLContainer is ready, but the port forwarding is not yet available. The adjusted wait strategy takes this into account. See also https://github.com/rancher-sandbox/rancher-desktop/issues/2609#issuecomment-1788871956 --- .../unicornservice/LocalTestApplication.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/agiletestingdays/untangletestcode/unicornservice/LocalTestApplication.java b/src/test/java/com/agiletestingdays/untangletestcode/unicornservice/LocalTestApplication.java index a0b610a..08a912f 100644 --- a/src/test/java/com/agiletestingdays/untangletestcode/unicornservice/LocalTestApplication.java +++ b/src/test/java/com/agiletestingdays/untangletestcode/unicornservice/LocalTestApplication.java @@ -1,10 +1,13 @@ package com.agiletestingdays.untangletestcode.unicornservice; +import java.time.Duration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.testcontainers.service.connection.ServiceConnection; import org.springframework.context.annotation.Bean; import org.testcontainers.containers.PostgreSQLContainer; +import org.testcontainers.containers.wait.strategy.Wait; +import org.testcontainers.containers.wait.strategy.WaitAllStrategy; import org.testcontainers.junit.jupiter.Testcontainers; @SpringBootApplication @@ -14,7 +17,15 @@ class LocalTestApplication { @Bean @ServiceConnection public PostgreSQLContainer postgreSQLContainer() { - return new PostgreSQLContainer<>("postgres:16"); + return new PostgreSQLContainer<>("postgres:16") + // see + // https://github.com/rancher-sandbox/rancher-desktop/issues/2609#issuecomment-1788871956 + .waitingFor( + new WaitAllStrategy() + .withStrategy(Wait.forListeningPort()) + .withStrategy( + Wait.forLogMessage(".*database system is ready to accept connections.*\\s", 2) + .withStartupTimeout(Duration.ofSeconds(60)))); } public static void main(String[] args) {