From 82fe5775963dcde6303f1a52c71a83b6239d718e Mon Sep 17 00:00:00 2001 From: Steve Armstrong Date: Sun, 16 Nov 2025 19:29:15 +0000 Subject: [PATCH 1/2] Add missing HttpClientSettingsPropertyMapper tests See gh-48145 Signed-off-by: Steve Armstrong --- ...HttpClientSettingsPropertyMapperTests.java | 110 +++++++++++++++++- 1 file changed, 107 insertions(+), 3 deletions(-) diff --git a/module/spring-boot-http-client/src/test/java/org/springframework/boot/http/client/autoconfigure/HttpClientSettingsPropertyMapperTests.java b/module/spring-boot-http-client/src/test/java/org/springframework/boot/http/client/autoconfigure/HttpClientSettingsPropertyMapperTests.java index 4cad8c5a95f..7330543b66f 100644 --- a/module/spring-boot-http-client/src/test/java/org/springframework/boot/http/client/autoconfigure/HttpClientSettingsPropertyMapperTests.java +++ b/module/spring-boot-http-client/src/test/java/org/springframework/boot/http/client/autoconfigure/HttpClientSettingsPropertyMapperTests.java @@ -16,19 +16,123 @@ package org.springframework.boot.http.client.autoconfigure; -import org.junit.jupiter.api.Disabled; +import java.time.Duration; + import org.junit.jupiter.api.Test; +import org.springframework.boot.http.client.HttpClientSettings; +import org.springframework.boot.http.client.HttpRedirects; +import org.springframework.boot.ssl.SslBundle; +import org.springframework.boot.ssl.SslBundles; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + /** * Tests for {@link HttpClientSettingsPropertyMapper}. * * @author Phillip Webb */ -@Disabled("TODO") class HttpClientSettingsPropertyMapperTests { @Test - void mapMapsProperties() { + void mapWhenPropertiesIsNullReturnsBaseSettings() { + HttpClientSettings baseSettings = HttpClientSettings.defaults() + .withConnectTimeout(Duration.ofSeconds(10)); + HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(null, baseSettings); + HttpClientSettings result = mapper.map(null); + assertThat(result).isEqualTo(baseSettings); + } + + @Test + void mapWhenPropertiesIsNullAndBaseSettingsIsNullReturnsDefaults() { + HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(null, null); + HttpClientSettings result = mapper.map(null); + assertThat(result).isEqualTo(HttpClientSettings.defaults()); + } + + @Test + void mapMapsRedirects() { + HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(null, null); + TestHttpClientSettingsProperties properties = new TestHttpClientSettingsProperties(); + properties.setRedirects(HttpRedirects.DONT_FOLLOW); + HttpClientSettings result = mapper.map(properties); + assertThat(result.redirects()).isEqualTo(HttpRedirects.DONT_FOLLOW); + } + + @Test + void mapMapsConnectTimeout() { + HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(null, null); + TestHttpClientSettingsProperties properties = new TestHttpClientSettingsProperties(); + properties.setConnectTimeout(Duration.ofSeconds(5)); + HttpClientSettings result = mapper.map(properties); + assertThat(result.connectTimeout()).isEqualTo(Duration.ofSeconds(5)); + } + + @Test + void mapMapsReadTimeout() { + HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(null, null); + TestHttpClientSettingsProperties properties = new TestHttpClientSettingsProperties(); + properties.setReadTimeout(Duration.ofSeconds(30)); + HttpClientSettings result = mapper.map(properties); + assertThat(result.readTimeout()).isEqualTo(Duration.ofSeconds(30)); + } + + @Test + void mapMapsSslBundle() { + SslBundle sslBundle = mock(SslBundle.class); + SslBundles sslBundles = mock(SslBundles.class); + given(sslBundles.getBundle("test-bundle")).willReturn(sslBundle); + HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(sslBundles, null); + TestHttpClientSettingsProperties properties = new TestHttpClientSettingsProperties(); + properties.getSsl().setBundle("test-bundle"); + HttpClientSettings result = mapper.map(properties); + assertThat(result.sslBundle()).isSameAs(sslBundle); + } + + @Test + void mapMapsAllProperties() { + SslBundle sslBundle = mock(SslBundle.class); + SslBundles sslBundles = mock(SslBundles.class); + given(sslBundles.getBundle("my-bundle")).willReturn(sslBundle); + HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(sslBundles, null); + TestHttpClientSettingsProperties properties = new TestHttpClientSettingsProperties(); + properties.setRedirects(HttpRedirects.FOLLOW); + properties.setConnectTimeout(Duration.ofSeconds(10)); + properties.setReadTimeout(Duration.ofSeconds(20)); + properties.getSsl().setBundle("my-bundle"); + HttpClientSettings result = mapper.map(properties); + assertThat(result.redirects()).isEqualTo(HttpRedirects.FOLLOW); + assertThat(result.connectTimeout()).isEqualTo(Duration.ofSeconds(10)); + assertThat(result.readTimeout()).isEqualTo(Duration.ofSeconds(20)); + assertThat(result.sslBundle()).isSameAs(sslBundle); + } + + @Test + void mapUsesBaseSettingsForMissingProperties() { + HttpClientSettings baseSettings = new HttpClientSettings(HttpRedirects.FOLLOW_WHEN_POSSIBLE, + Duration.ofSeconds(15), Duration.ofSeconds(25), null); + HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(null, baseSettings); + TestHttpClientSettingsProperties properties = new TestHttpClientSettingsProperties(); + properties.setConnectTimeout(Duration.ofSeconds(5)); + HttpClientSettings result = mapper.map(properties); + assertThat(result.redirects()).isEqualTo(HttpRedirects.FOLLOW_WHEN_POSSIBLE); + assertThat(result.connectTimeout()).isEqualTo(Duration.ofSeconds(5)); + assertThat(result.readTimeout()).isEqualTo(Duration.ofSeconds(25)); + } + + @Test + void mapWhenSslBundleRequestedButSslBundlesIsNullThrowsException() { + HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(null, null); + TestHttpClientSettingsProperties properties = new TestHttpClientSettingsProperties(); + properties.getSsl().setBundle("test-bundle"); + assertThatIllegalStateException().isThrownBy(() -> mapper.map(properties)) + .withMessage("No 'sslBundles' available"); + } + + static class TestHttpClientSettingsProperties extends HttpClientSettingsProperties { } From 971bd500d46975df01da8e538aab9fac1d5f440e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Mon, 17 Nov 2025 09:46:54 +0100 Subject: [PATCH 2/2] Polish "Add missing HttpClientSettingsPropertyMapper tests" See gh-48145 --- ...HttpClientSettingsPropertyMapperTests.java | 35 +++++-------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/module/spring-boot-http-client/src/test/java/org/springframework/boot/http/client/autoconfigure/HttpClientSettingsPropertyMapperTests.java b/module/spring-boot-http-client/src/test/java/org/springframework/boot/http/client/autoconfigure/HttpClientSettingsPropertyMapperTests.java index 7330543b66f..2a49cce16f4 100644 --- a/module/spring-boot-http-client/src/test/java/org/springframework/boot/http/client/autoconfigure/HttpClientSettingsPropertyMapperTests.java +++ b/module/spring-boot-http-client/src/test/java/org/springframework/boot/http/client/autoconfigure/HttpClientSettingsPropertyMapperTests.java @@ -33,24 +33,23 @@ import static org.mockito.Mockito.mock; /** * Tests for {@link HttpClientSettingsPropertyMapper}. * - * @author Phillip Webb + * @author Steve Armstrong */ class HttpClientSettingsPropertyMapperTests { @Test - void mapWhenPropertiesIsNullReturnsBaseSettings() { - HttpClientSettings baseSettings = HttpClientSettings.defaults() - .withConnectTimeout(Duration.ofSeconds(10)); - HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(null, baseSettings); + void mapWhenPropertiesIsNullAndBaseSettingsIsNullReturnsDefaults() { + HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(null, null); HttpClientSettings result = mapper.map(null); - assertThat(result).isEqualTo(baseSettings); + assertThat(result).isEqualTo(HttpClientSettings.defaults()); } @Test - void mapWhenPropertiesIsNullAndBaseSettingsIsNullReturnsDefaults() { - HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(null, null); + void mapWhenPropertiesIsNullReturnsBaseSettings() { + HttpClientSettings baseSettings = HttpClientSettings.defaults().withConnectTimeout(Duration.ofSeconds(10)); + HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(null, baseSettings); HttpClientSettings result = mapper.map(null); - assertThat(result).isEqualTo(HttpClientSettings.defaults()); + assertThat(result).isEqualTo(baseSettings); } @Test @@ -92,24 +91,6 @@ class HttpClientSettingsPropertyMapperTests { assertThat(result.sslBundle()).isSameAs(sslBundle); } - @Test - void mapMapsAllProperties() { - SslBundle sslBundle = mock(SslBundle.class); - SslBundles sslBundles = mock(SslBundles.class); - given(sslBundles.getBundle("my-bundle")).willReturn(sslBundle); - HttpClientSettingsPropertyMapper mapper = new HttpClientSettingsPropertyMapper(sslBundles, null); - TestHttpClientSettingsProperties properties = new TestHttpClientSettingsProperties(); - properties.setRedirects(HttpRedirects.FOLLOW); - properties.setConnectTimeout(Duration.ofSeconds(10)); - properties.setReadTimeout(Duration.ofSeconds(20)); - properties.getSsl().setBundle("my-bundle"); - HttpClientSettings result = mapper.map(properties); - assertThat(result.redirects()).isEqualTo(HttpRedirects.FOLLOW); - assertThat(result.connectTimeout()).isEqualTo(Duration.ofSeconds(10)); - assertThat(result.readTimeout()).isEqualTo(Duration.ofSeconds(20)); - assertThat(result.sslBundle()).isSameAs(sslBundle); - } - @Test void mapUsesBaseSettingsForMissingProperties() { HttpClientSettings baseSettings = new HttpClientSettings(HttpRedirects.FOLLOW_WHEN_POSSIBLE,