diff --git a/module/spring-boot-amqp-rabbitmq/src/dockerTest/java/org/springframework/boot/amqp/rabbitmq/docker/compose/AmqpRabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests.java b/module/spring-boot-amqp-rabbitmq/src/dockerTest/java/org/springframework/boot/amqp/rabbitmq/docker/compose/AmqpRabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests.java index 3a4cfbd8b2d..59b92c1b795 100644 --- a/module/spring-boot-amqp-rabbitmq/src/dockerTest/java/org/springframework/boot/amqp/rabbitmq/docker/compose/AmqpRabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/module/spring-boot-amqp-rabbitmq/src/dockerTest/java/org/springframework/boot/amqp/rabbitmq/docker/compose/AmqpRabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,6 +16,10 @@ package org.springframework.boot.amqp.rabbitmq.docker.compose; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.SocketConfigurators; + import org.springframework.boot.amqp.rabbitmq.autoconfigure.AmqpRabbitConnectionDetails; import org.springframework.boot.amqp.rabbitmq.autoconfigure.AmqpRabbitConnectionDetails.Address; import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; @@ -36,7 +40,7 @@ import static org.assertj.core.api.Assertions.assertThat; class AmqpRabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests { @DockerComposeTest(composeFile = "rabbitmq-compose.yaml", image = TestImage.RABBITMQ) - void runCreatesConnectionDetails(AmqpRabbitConnectionDetails connectionDetails) { + void runCreatesConnectionDetails(AmqpRabbitConnectionDetails connectionDetails) throws Exception { assertConnectionDetails(connectionDetails); assertThat(connectionDetails.getSslBundle()).isNull(); } @@ -44,19 +48,38 @@ class AmqpRabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests { @DockerComposeTest(composeFile = "rabbitmq-ssl-compose.yaml", image = TestImage.RABBITMQ, additionalResources = { "../../ca.crt", "../../server.crt", "../../server.key", "../../client.crt", "../../client.key", "rabbitmq-ssl.conf" }) - void runWithSslCreatesConnectionDetails(AmqpRabbitConnectionDetails connectionDetails) { + void runWithSslCreatesConnectionDetails(AmqpRabbitConnectionDetails connectionDetails) throws Exception { assertConnectionDetails(connectionDetails); SslBundle sslBundle = connectionDetails.getSslBundle(); assertThat(sslBundle).isNotNull(); } - private void assertConnectionDetails(AmqpRabbitConnectionDetails connectionDetails) { + private void assertConnectionDetails(AmqpRabbitConnectionDetails connectionDetails) throws Exception { assertThat(connectionDetails.getUsername()).isEqualTo("myuser"); assertThat(connectionDetails.getPassword()).isEqualTo("secret"); assertThat(connectionDetails.getVirtualHost()).isEqualTo("/"); Address address = connectionDetails.getAddress(); assertThat(address.host()).isNotNull(); assertThat(address.port()).isGreaterThan(0); + assertThatConnectionCanBeMade(connectionDetails); + } + + private void assertThatConnectionCanBeMade(AmqpRabbitConnectionDetails connectionDetails) throws Exception { + ConnectionFactory connectionFactory = new ConnectionFactory(); + Address address = connectionDetails.getAddress(); + 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()); + connectionFactory.setSocketConfigurator(SocketConfigurators.defaultConfigurator()); + } + try (Connection connection = connectionFactory.newConnection()) { + assertThat(connection.isOpen()).isTrue(); + } } } diff --git a/module/spring-boot-rabbitmq/src/dockerTest/java/org/springframework/boot/rabbitmq/docker/compose/RabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests.java b/module/spring-boot-rabbitmq/src/dockerTest/java/org/springframework/boot/rabbitmq/docker/compose/RabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests.java index fb482a6cbb8..cd3ac64fa04 100644 --- a/module/spring-boot-rabbitmq/src/dockerTest/java/org/springframework/boot/rabbitmq/docker/compose/RabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests.java +++ b/module/spring-boot-rabbitmq/src/dockerTest/java/org/springframework/boot/rabbitmq/docker/compose/RabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests.java @@ -16,6 +16,10 @@ package org.springframework.boot.rabbitmq.docker.compose; +import com.rabbitmq.client.Connection; +import com.rabbitmq.client.ConnectionFactory; +import com.rabbitmq.client.SocketConfigurators; + import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest; import org.springframework.boot.rabbitmq.autoconfigure.RabbitConnectionDetails; import org.springframework.boot.rabbitmq.autoconfigure.RabbitConnectionDetails.Address; @@ -35,7 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat; class RabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests { @DockerComposeTest(composeFile = "rabbitmq-compose.yaml", image = TestImage.RABBITMQ) - void runCreatesConnectionDetails(RabbitConnectionDetails connectionDetails) { + void runCreatesConnectionDetails(RabbitConnectionDetails connectionDetails) throws Exception { assertConnectionDetails(connectionDetails); assertThat(connectionDetails.getSslBundle()).isNull(); } @@ -43,13 +47,12 @@ class RabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests { @DockerComposeTest(composeFile = "rabbitmq-ssl-compose.yaml", image = TestImage.RABBITMQ, additionalResources = { "../../ca.crt", "../../server.crt", "../../server.key", "../../client.crt", "../../client.key", "rabbitmq-ssl.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("/"); @@ -57,6 +60,25 @@ class RabbitMqDockerComposeConnectionDetailsFactoryIntegrationTests { 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()); + connectionFactory.setSocketConfigurator(SocketConfigurators.defaultConfigurator()); + } + try (Connection connection = connectionFactory.newConnection()) { + assertThat(connection.isOpen()).isTrue(); + } } } diff --git a/module/spring-boot-rabbitmq/src/main/java/org/springframework/boot/rabbitmq/docker/compose/RabbitMqDockerComposeConnectionDetailsFactory.java b/module/spring-boot-rabbitmq/src/main/java/org/springframework/boot/rabbitmq/docker/compose/RabbitMqDockerComposeConnectionDetailsFactory.java index 30b7ab878cb..e78bbe70d5c 100644 --- a/module/spring-boot-rabbitmq/src/main/java/org/springframework/boot/rabbitmq/docker/compose/RabbitMqDockerComposeConnectionDetailsFactory.java +++ b/module/spring-boot-rabbitmq/src/main/java/org/springframework/boot/rabbitmq/docker/compose/RabbitMqDockerComposeConnectionDetailsFactory.java @@ -38,6 +38,8 @@ class RabbitMqDockerComposeConnectionDetailsFactory private static final int RABBITMQ_PORT = 5672; + private static final int RABBITMQ_TLS_PORT = 5671; + protected RabbitMqDockerComposeConnectionDetailsFactory() { super("rabbitmq"); } @@ -70,7 +72,8 @@ class RabbitMqDockerComposeConnectionDetailsFactory super(service); this.environment = new RabbitMqEnvironment(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