diff --git a/module/spring-boot-amqp/src/dockerTest/java/org/springframework/boot/amqp/docker/compose/RabbitDockerComposeConnectionDetailsFactoryIntegrationTests.java b/module/spring-boot-amqp/src/dockerTest/java/org/springframework/boot/amqp/docker/compose/RabbitDockerComposeConnectionDetailsFactoryIntegrationTests.java index cab917ea4c5..ed8f07ea4ad 100644 --- a/module/spring-boot-amqp/src/dockerTest/java/org/springframework/boot/amqp/docker/compose/RabbitDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/module/spring-boot-amqp/src/dockerTest/java/org/springframework/boot/amqp/docker/compose/RabbitDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,6 +16,9 @@ package org.springframework.boot.amqp.docker.compose; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; + import org.springframework.boot.amqp.autoconfigure.RabbitConnectionDetails; import org.springframework.boot.amqp.autoconfigure.RabbitConnectionDetails.Address; import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; @@ -35,20 +38,19 @@ import static org.assertj.core.api.Assertions.assertThat; class RabbitDockerComposeConnectionDetailsFactoryIntegrationTests { @DockerComposeTest(composeFile = "rabbit-compose.yaml", image = TestImage.RABBITMQ) - void runCreatesConnectionDetails(RabbitConnectionDetails connectionDetails) { + void runCreatesConnectionDetails(RabbitConnectionDetails connectionDetails) throws Exception { assertConnectionDetails(connectionDetails); assertThat(connectionDetails.getSslBundle()).isNull(); } @DockerComposeTest(composeFile = "rabbit-ssl-compose.yaml", image = TestImage.RABBITMQ, additionalResources = { "ca.crt", "server.crt", "server.key", "client.crt", "client.key", "rabbitmq.conf" }) - void runWithSslCreatesConnectionDetails(RabbitConnectionDetails connectionDetails) { + void runWithSslCreatesConnectionDetails(RabbitConnectionDetails connectionDetails) throws Exception { assertConnectionDetails(connectionDetails); - SslBundle sslBundle = connectionDetails.getSslBundle(); - assertThat(sslBundle).isNotNull(); + assertThat(connectionDetails.getSslBundle()).isNotNull(); } - private void assertConnectionDetails(RabbitConnectionDetails connectionDetails) { + private void assertConnectionDetails(RabbitConnectionDetails connectionDetails) throws Exception { assertThat(connectionDetails.getUsername()).isEqualTo("myuser"); assertThat(connectionDetails.getPassword()).isEqualTo("secret"); assertThat(connectionDetails.getVirtualHost()).isEqualTo("/"); @@ -56,6 +58,24 @@ class RabbitDockerComposeConnectionDetailsFactoryIntegrationTests { Address address = connectionDetails.getFirstAddress(); assertThat(address.host()).isNotNull(); assertThat(address.port()).isGreaterThan(0); + assertThatConnectionCanBeMade(connectionDetails); + } + + private void assertThatConnectionCanBeMade(RabbitConnectionDetails connectionDetails) throws Exception { + ConnectionFactory connectionFactory = new ConnectionFactory(); + Address address = connectionDetails.getFirstAddress(); + connectionFactory.setHost(address.host()); + connectionFactory.setPort(address.port()); + connectionFactory.setUsername(connectionDetails.getUsername()); + connectionFactory.setPassword(connectionDetails.getPassword()); + connectionFactory.setVirtualHost(connectionDetails.getVirtualHost()); + SslBundle sslBundle = connectionDetails.getSslBundle(); + if (sslBundle != null) { + connectionFactory.useSslProtocol(sslBundle.createSslContext()); + } + try (Connection connection = connectionFactory.newConnection()) { + assertThat(connection.isOpen()).isTrue(); + } } } diff --git a/module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/docker/compose/RabbitDockerComposeConnectionDetailsFactory.java b/module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/docker/compose/RabbitDockerComposeConnectionDetailsFactory.java index a601ab093c3..31b1cfdc35e 100644 --- a/module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/docker/compose/RabbitDockerComposeConnectionDetailsFactory.java +++ b/module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/docker/compose/RabbitDockerComposeConnectionDetailsFactory.java @@ -40,6 +40,8 @@ class RabbitDockerComposeConnectionDetailsFactory private static final int RABBITMQ_PORT = 5672; + private static final int RABBITMQ_TLS_PORT = 5671; + protected RabbitDockerComposeConnectionDetailsFactory() { super("rabbitmq"); } @@ -66,7 +68,8 @@ class RabbitDockerComposeConnectionDetailsFactory super(service); this.environment = new RabbitEnvironment(service.env()); this.sslBundle = getSslBundle(service); - this.addresses = List.of(new Address(service.host(), service.ports().get(RABBITMQ_PORT))); + int containerPort = (this.sslBundle != null) ? RABBITMQ_TLS_PORT : RABBITMQ_PORT; + this.addresses = List.of(new Address(service.host(), service.ports().get(containerPort))); } @Override