diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/PropertiesRabbitConnectionDetails.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/PropertiesRabbitConnectionDetails.java index 3e4c485d44..1ac95b513f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/PropertiesRabbitConnectionDetails.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/PropertiesRabbitConnectionDetails.java @@ -53,8 +53,10 @@ class PropertiesRabbitConnectionDetails implements RabbitConnectionDetails { public List
getAddresses() { List addresses = new ArrayList<>(); for (String address : this.properties.determineAddresses().split(",")) { - String[] components = address.split(":"); - addresses.add(new Address(components[0], Integer.parseInt(components[1]))); + int portSeparatorIndex = address.lastIndexOf(':'); + String host = address.substring(0, portSeparatorIndex); + String port = address.substring(portSeparatorIndex + 1); + addresses.add(new Address(host, Integer.parseInt(port))); } return addresses; } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/PropertiesRabbitConnectionDetailsTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/PropertiesRabbitConnectionDetailsTests.java new file mode 100644 index 0000000000..fb4f65d9cf --- /dev/null +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/PropertiesRabbitConnectionDetailsTests.java @@ -0,0 +1,54 @@ +/* + * Copyright 2012-2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.autoconfigure.amqp; + +import java.util.List; + +import org.junit.jupiter.api.Test; + +import org.springframework.boot.autoconfigure.amqp.RabbitConnectionDetails.Address; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link PropertiesRabbitConnectionDetails}. + * + * @author Jonas Fügedi + */ +class PropertiesRabbitConnectionDetailsTests { + + private static final int DEFAULT_PORT = 5672; + + @Test + void getAddresses() { + RabbitProperties properties = new RabbitProperties(); + properties.setAddresses("localhost,localhost:1234,[::1],[::1]:32863"); + PropertiesRabbitConnectionDetails propertiesRabbitConnectionDetails = new PropertiesRabbitConnectionDetails( + properties); + List addresses = propertiesRabbitConnectionDetails.getAddresses(); + assertThat(addresses.size()).isEqualTo(4); + assertThat(addresses.get(0).host()).isEqualTo("localhost"); + assertThat(addresses.get(0).port()).isEqualTo(DEFAULT_PORT); + assertThat(addresses.get(1).host()).isEqualTo("localhost"); + assertThat(addresses.get(1).port()).isEqualTo(1234); + assertThat(addresses.get(2).host()).isEqualTo("[::1]"); + assertThat(addresses.get(2).port()).isEqualTo(DEFAULT_PORT); + assertThat(addresses.get(3).host()).isEqualTo("[::1]"); + assertThat(addresses.get(3).port()).isEqualTo(32863); + } + +} diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java index c543033365..2a858e530c 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/amqp/RabbitPropertiesTests.java @@ -282,6 +282,13 @@ class RabbitPropertiesTests { assertThat(this.properties.determineAddresses()).isEqualTo("rabbit.example.com:1234"); } + @Test + void determineAddressesUsesIpv6HostAndPortPropertiesWhenNoAddressesSet() { + this.properties.setHost("[::1]"); + this.properties.setPort(32863); + assertThat(this.properties.determineAddresses()).isEqualTo("[::1]:32863"); + } + @Test void determineSslUsingAmqpsReturnsStateOfFirstAddress() { this.properties.setAddresses("amqps://root:password@otherhost,amqp://root:password2@otherhost2");