Merge branch '4.1.x'

Closes gh-51668
This commit is contained in:
Andy Wilkinson
2026-09-11 14:19:14 +01:00
3 changed files with 57 additions and 9 deletions
@@ -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();
}
}
}
@@ -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();
}
}
}
@@ -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