From 8691d01aaf87e230ceca4ab05114e0e6263f732f Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Tue, 5 Jun 2018 15:44:52 +0200 Subject: [PATCH 1/3] Polish "Add duration support for setConnectTimout and setReadTimeout" See gh-13355 --- .../boot/web/client/RestTemplateBuilder.java | 218 ++++++++++-------- 1 file changed, 120 insertions(+), 98 deletions(-) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/RestTemplateBuilder.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/RestTemplateBuilder.java index ad1efb7159..8a4d2eb6cc 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/RestTemplateBuilder.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/RestTemplateBuilder.java @@ -19,12 +19,14 @@ package org.springframework.boot.web.client; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.time.Duration; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; +import java.util.function.Consumer; import java.util.function.Supplier; import org.springframework.beans.BeanUtils; @@ -76,7 +78,7 @@ public class RestTemplateBuilder { private final Set restTemplateCustomizers; - private final Set requestFactoryCustomizers; + private final RequestFactoryCustomizer requestFactoryCustomizer; private final Set interceptors; @@ -96,7 +98,7 @@ public class RestTemplateBuilder { this.basicAuthorization = null; this.restTemplateCustomizers = Collections .unmodifiableSet(new LinkedHashSet<>(Arrays.asList(customizers))); - this.requestFactoryCustomizers = Collections.emptySet(); + this.requestFactoryCustomizer = new RequestFactoryCustomizer(); this.interceptors = Collections.emptySet(); } @@ -106,7 +108,7 @@ public class RestTemplateBuilder { UriTemplateHandler uriTemplateHandler, ResponseErrorHandler errorHandler, BasicAuthorizationInterceptor basicAuthorization, Set restTemplateCustomizers, - Set requestFactoryCustomizers, + RequestFactoryCustomizer requestFactoryCustomizer, Set interceptors) { this.detectRequestFactory = detectRequestFactory; this.rootUri = rootUri; @@ -116,7 +118,7 @@ public class RestTemplateBuilder { this.errorHandler = errorHandler; this.basicAuthorization = basicAuthorization; this.restTemplateCustomizers = restTemplateCustomizers; - this.requestFactoryCustomizers = requestFactoryCustomizers; + this.requestFactoryCustomizer = requestFactoryCustomizer; this.interceptors = interceptors; } @@ -131,7 +133,7 @@ public class RestTemplateBuilder { return new RestTemplateBuilder(detectRequestFactory, this.rootUri, this.messageConverters, this.requestFactorySupplier, this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, - this.restTemplateCustomizers, this.requestFactoryCustomizers, + this.restTemplateCustomizers, this.requestFactoryCustomizer, this.interceptors); } @@ -145,7 +147,7 @@ public class RestTemplateBuilder { return new RestTemplateBuilder(this.detectRequestFactory, rootUri, this.messageConverters, this.requestFactorySupplier, this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, - this.restTemplateCustomizers, this.requestFactoryCustomizers, + this.restTemplateCustomizers, this.requestFactoryCustomizer, this.interceptors); } @@ -179,7 +181,7 @@ public class RestTemplateBuilder { new LinkedHashSet>(messageConverters)), this.requestFactorySupplier, this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, this.restTemplateCustomizers, - this.requestFactoryCustomizers, this.interceptors); + this.requestFactoryCustomizer, this.interceptors); } /** @@ -209,7 +211,7 @@ public class RestTemplateBuilder { append(this.messageConverters, messageConverters), this.requestFactorySupplier, this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, this.restTemplateCustomizers, - this.requestFactoryCustomizers, this.interceptors); + this.requestFactoryCustomizer, this.interceptors); } /** @@ -225,7 +227,7 @@ public class RestTemplateBuilder { new LinkedHashSet<>(new RestTemplate().getMessageConverters())), this.requestFactorySupplier, this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, this.restTemplateCustomizers, - this.requestFactoryCustomizers, this.interceptors); + this.requestFactoryCustomizer, this.interceptors); } /** @@ -258,7 +260,7 @@ public class RestTemplateBuilder { return new RestTemplateBuilder(this.detectRequestFactory, this.rootUri, this.messageConverters, this.requestFactorySupplier, this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, - this.restTemplateCustomizers, this.requestFactoryCustomizers, + this.restTemplateCustomizers, this.requestFactoryCustomizer, Collections.unmodifiableSet(new LinkedHashSet<>(interceptors))); } @@ -290,7 +292,7 @@ public class RestTemplateBuilder { return new RestTemplateBuilder(this.detectRequestFactory, this.rootUri, this.messageConverters, this.requestFactorySupplier, this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, - this.restTemplateCustomizers, this.requestFactoryCustomizers, + this.restTemplateCustomizers, this.requestFactoryCustomizer, append(this.interceptors, interceptors)); } @@ -332,7 +334,7 @@ public class RestTemplateBuilder { return new RestTemplateBuilder(this.detectRequestFactory, this.rootUri, this.messageConverters, requestFactorySupplier, this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, this.restTemplateCustomizers, - this.requestFactoryCustomizers, this.interceptors); + this.requestFactoryCustomizer, this.interceptors); } /** @@ -346,7 +348,7 @@ public class RestTemplateBuilder { return new RestTemplateBuilder(this.detectRequestFactory, this.rootUri, this.messageConverters, this.requestFactorySupplier, uriTemplateHandler, this.errorHandler, this.basicAuthorization, this.restTemplateCustomizers, - this.requestFactoryCustomizers, this.interceptors); + this.requestFactoryCustomizer, this.interceptors); } /** @@ -360,7 +362,7 @@ public class RestTemplateBuilder { return new RestTemplateBuilder(this.detectRequestFactory, this.rootUri, this.messageConverters, this.requestFactorySupplier, this.uriTemplateHandler, errorHandler, this.basicAuthorization, - this.restTemplateCustomizers, this.requestFactoryCustomizers, + this.restTemplateCustomizers, this.requestFactoryCustomizer, this.interceptors); } @@ -376,7 +378,7 @@ public class RestTemplateBuilder { this.messageConverters, this.requestFactorySupplier, this.uriTemplateHandler, this.errorHandler, new BasicAuthorizationInterceptor(username, password), - this.restTemplateCustomizers, this.requestFactoryCustomizers, + this.restTemplateCustomizers, this.requestFactoryCustomizer, this.interceptors); } @@ -414,7 +416,7 @@ public class RestTemplateBuilder { this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, Collections.unmodifiableSet(new LinkedHashSet( restTemplateCustomizers)), - this.requestFactoryCustomizers, this.interceptors); + this.requestFactoryCustomizer, this.interceptors); } /** @@ -447,7 +449,22 @@ public class RestTemplateBuilder { this.messageConverters, this.requestFactorySupplier, this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, append(this.restTemplateCustomizers, customizers), - this.requestFactoryCustomizers, this.interceptors); + this.requestFactoryCustomizer, this.interceptors); + } + + /** + * Sets the connection timeout on the underlying {@link ClientHttpRequestFactory}. + * @param connectTimeout the connection timeout + * @return a new builder instance. + * @since 2.1.0 + */ + public RestTemplateBuilder setConnectTimeout(Duration connectTimeout) { + return new RestTemplateBuilder(this.detectRequestFactory, this.rootUri, + this.messageConverters, this.requestFactorySupplier, + this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, + this.restTemplateCustomizers, + this.requestFactoryCustomizer.connectTimeout(connectTimeout), + this.interceptors); } /** @@ -455,14 +472,25 @@ public class RestTemplateBuilder { * {@link ClientHttpRequestFactory}. * @param connectTimeout the connection timeout in milliseconds * @return a new builder instance. + * @deprecated since 2.1.0 in favor of {@link #setConnectTimeout(Duration)} */ + @Deprecated public RestTemplateBuilder setConnectTimeout(int connectTimeout) { + return setConnectTimeout(Duration.ofMillis(connectTimeout)); + } + + /** + * Sets the read timeout on the underlying {@link ClientHttpRequestFactory}. + * @param readTimeout the read timeout + * @return a new builder instance. + * @since 2.1.0 + */ + public RestTemplateBuilder setReadTimeout(Duration readTimeout) { return new RestTemplateBuilder(this.detectRequestFactory, this.rootUri, this.messageConverters, this.requestFactorySupplier, this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, this.restTemplateCustomizers, - append(this.requestFactoryCustomizers, - new ConnectTimeoutRequestFactoryCustomizer(connectTimeout)), + this.requestFactoryCustomizer.readTimeout(readTimeout), this.interceptors); } @@ -471,15 +499,11 @@ public class RestTemplateBuilder { * {@link ClientHttpRequestFactory}. * @param readTimeout the read timeout in milliseconds * @return a new builder instance. + * @deprecated since 2.1.0 in favour of {@link #setReadTimeout(Duration)} */ + @Deprecated public RestTemplateBuilder setReadTimeout(int readTimeout) { - return new RestTemplateBuilder(this.detectRequestFactory, this.rootUri, - this.messageConverters, this.requestFactorySupplier, - this.uriTemplateHandler, this.errorHandler, this.basicAuthorization, - this.restTemplateCustomizers, - append(this.requestFactoryCustomizers, - new ReadTimeoutRequestFactoryCustomizer(readTimeout)), - this.interceptors); + return setReadTimeout(Duration.ofMillis(readTimeout)); } /** @@ -549,105 +573,103 @@ public class RestTemplateBuilder { requestFactory = new ClientHttpRequestFactorySupplier().get(); } if (requestFactory != null) { - ClientHttpRequestFactory unwrappedRequestFactory = unwrapRequestFactoryIfNecessary( - requestFactory); - for (RequestFactoryCustomizer customizer : this.requestFactoryCustomizers) { - customizer.customize(unwrappedRequestFactory); + if (this.requestFactoryCustomizer != null) { + this.requestFactoryCustomizer.accept(requestFactory); } restTemplate.setRequestFactory(requestFactory); } } - private ClientHttpRequestFactory unwrapRequestFactoryIfNecessary( - ClientHttpRequestFactory requestFactory) { - if (!(requestFactory instanceof AbstractClientHttpRequestFactoryWrapper)) { - return requestFactory; - } - ClientHttpRequestFactory unwrappedRequestFactory = requestFactory; - Field field = ReflectionUtils.findField( - AbstractClientHttpRequestFactoryWrapper.class, "requestFactory"); - ReflectionUtils.makeAccessible(field); - do { - unwrappedRequestFactory = (ClientHttpRequestFactory) ReflectionUtils - .getField(field, unwrappedRequestFactory); - } - while (unwrappedRequestFactory instanceof AbstractClientHttpRequestFactoryWrapper); - return unwrappedRequestFactory; - } - - private Set append(Set set, T addition) { - Set result = new LinkedHashSet<>(set != null ? set : Collections.emptySet()); - result.add(addition); - return Collections.unmodifiableSet(result); - } - private Set append(Set set, Collection additions) { Set result = new LinkedHashSet<>(set != null ? set : Collections.emptySet()); result.addAll(additions); return Collections.unmodifiableSet(result); } - /** - * Strategy interface used to customize the {@link ClientHttpRequestFactory}. - */ - private interface RequestFactoryCustomizer { + private static class RequestFactoryCustomizer + implements Consumer { - void customize(ClientHttpRequestFactory factory); + private final Duration connectTimeout; - } + private final Duration readTimeout; - /** - * {@link RequestFactoryCustomizer} to call a "set timeout" method. - */ - private abstract static class TimeoutRequestFactoryCustomizer - implements RequestFactoryCustomizer { + RequestFactoryCustomizer() { + this(null, null); + } - private final int timeout; + private RequestFactoryCustomizer(Duration connectTimeout, Duration readTimeout) { + this.connectTimeout = connectTimeout; + this.readTimeout = readTimeout; + } - private final String methodName; + public RequestFactoryCustomizer connectTimeout(Duration connectTimeout) { + return new RequestFactoryCustomizer(connectTimeout, this.readTimeout); + } - TimeoutRequestFactoryCustomizer(int timeout, String methodName) { - this.timeout = timeout; - this.methodName = methodName; + public RequestFactoryCustomizer readTimeout(Duration readTimeout) { + return new RequestFactoryCustomizer(this.connectTimeout, readTimeout); } @Override - public void customize(ClientHttpRequestFactory factory) { - ReflectionUtils.invokeMethod(findMethod(factory), factory, this.timeout); - } - - private Method findMethod(ClientHttpRequestFactory factory) { - Method method = ReflectionUtils.findMethod(factory.getClass(), - this.methodName, int.class); - if (method != null) { - return method; + public void accept(ClientHttpRequestFactory requestFactory) { + ClientHttpRequestFactory unwrappedRequestFactory = unwrapRequestFactoryIfNecessary( + requestFactory); + if (this.connectTimeout != null) { + new TimeoutRequestFactoryCustomizer(this.connectTimeout, + "setConnectTimeout").customize(unwrappedRequestFactory); + } + if (this.readTimeout != null) { + new TimeoutRequestFactoryCustomizer(this.readTimeout, "setReadTimeout") + .customize(unwrappedRequestFactory); } - throw new IllegalStateException("Request factory " + factory.getClass() - + " does not have a " + this.methodName + "(int) method"); } - } - - /** - * {@link RequestFactoryCustomizer} to set the read timeout. - */ - private static class ReadTimeoutRequestFactoryCustomizer - extends TimeoutRequestFactoryCustomizer { - - ReadTimeoutRequestFactoryCustomizer(int readTimeout) { - super(readTimeout, "setReadTimeout"); + private ClientHttpRequestFactory unwrapRequestFactoryIfNecessary( + ClientHttpRequestFactory requestFactory) { + if (!(requestFactory instanceof AbstractClientHttpRequestFactoryWrapper)) { + return requestFactory; + } + ClientHttpRequestFactory unwrappedRequestFactory = requestFactory; + Field field = ReflectionUtils.findField( + AbstractClientHttpRequestFactoryWrapper.class, "requestFactory"); + ReflectionUtils.makeAccessible(field); + do { + unwrappedRequestFactory = (ClientHttpRequestFactory) ReflectionUtils + .getField(field, unwrappedRequestFactory); + } + while (unwrappedRequestFactory instanceof AbstractClientHttpRequestFactoryWrapper); + return unwrappedRequestFactory; } - } + /** + * {@link ClientHttpRequestFactory} customizer to call a "set timeout" method. + */ + private static final class TimeoutRequestFactoryCustomizer { - /** - * {@link RequestFactoryCustomizer} to set the connection timeout. - */ - private static class ConnectTimeoutRequestFactoryCustomizer - extends TimeoutRequestFactoryCustomizer { + private final Duration timeout; + + private final String methodName; + + TimeoutRequestFactoryCustomizer(Duration timeout, String methodName) { + this.timeout = timeout; + this.methodName = methodName; + } + + void customize(ClientHttpRequestFactory factory) { + ReflectionUtils.invokeMethod(findMethod(factory), factory, + Math.toIntExact(this.timeout.toMillis())); + } + + private Method findMethod(ClientHttpRequestFactory factory) { + Method method = ReflectionUtils.findMethod(factory.getClass(), + this.methodName, int.class); + if (method != null) { + return method; + } + throw new IllegalStateException("Request factory " + factory.getClass() + + " does not have a " + this.methodName + "(int) method"); + } - ConnectTimeoutRequestFactoryCustomizer(int connectTimeout) { - super(connectTimeout, "setConnectTimeout"); } } From 36f3c1b883a0f3c0b8482ce680d58648cfea6b60 Mon Sep 17 00:00:00 2001 From: Dmytro Nosan Date: Mon, 4 Jun 2018 15:53:09 +0300 Subject: [PATCH 2/3] Add duration support for setConnectTimeout and setReadTimeout See gh-13355 --- .../web/client/RestTemplateBuilderTests.java | 62 ++++++++++++++++--- 1 file changed, 52 insertions(+), 10 deletions(-) diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java index cd87b9a861..0c8a13315f 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java @@ -16,6 +16,7 @@ package org.springframework.boot.web.client; +import java.time.Duration; import java.util.Collections; import java.util.Set; import java.util.function.Supplier; @@ -60,6 +61,7 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat * @author Stephane Nicoll * @author Phillip Webb * @author Andy Wilkinson + * @author Dmytro Nosan */ public class RestTemplateBuilderTests { @@ -390,7 +392,7 @@ public class RestTemplateBuilderTests { } @Test - public void customizerShouldBeAppliedInTheEnd() { + public void customizerShouldBeAppliedAtTheEnd() { ResponseErrorHandler errorHandler = mock(ResponseErrorHandler.class); ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); this.builder.interceptors(this.interceptor) @@ -439,7 +441,7 @@ public class RestTemplateBuilderTests { public void connectTimeoutCanBeConfiguredOnHttpComponentsRequestFactory() { ClientHttpRequestFactory requestFactory = this.builder .requestFactory(HttpComponentsClientHttpRequestFactory.class) - .setConnectTimeout(1234).build().getRequestFactory(); + .setConnectTimeout(Duration.ofMillis(1234)).build().getRequestFactory(); assertThat(((RequestConfig) ReflectionTestUtils.getField(requestFactory, "requestConfig")).getConnectTimeout()).isEqualTo(1234); } @@ -448,7 +450,7 @@ public class RestTemplateBuilderTests { public void readTimeoutCanBeConfiguredOnHttpComponentsRequestFactory() { ClientHttpRequestFactory requestFactory = this.builder .requestFactory(HttpComponentsClientHttpRequestFactory.class) - .setReadTimeout(1234).build().getRequestFactory(); + .setReadTimeout(Duration.ofMillis(1234)).build().getRequestFactory(); assertThat(((RequestConfig) ReflectionTestUtils.getField(requestFactory, "requestConfig")).getSocketTimeout()).isEqualTo(1234); } @@ -457,7 +459,7 @@ public class RestTemplateBuilderTests { public void connectTimeoutCanBeConfiguredOnSimpleRequestFactory() { ClientHttpRequestFactory requestFactory = this.builder .requestFactory(SimpleClientHttpRequestFactory.class) - .setConnectTimeout(1234).build().getRequestFactory(); + .setConnectTimeout(Duration.ofMillis(1234)).build().getRequestFactory(); assertThat(ReflectionTestUtils.getField(requestFactory, "connectTimeout")) .isEqualTo(1234); } @@ -465,8 +467,8 @@ public class RestTemplateBuilderTests { @Test public void readTimeoutCanBeConfiguredOnSimpleRequestFactory() { ClientHttpRequestFactory requestFactory = this.builder - .requestFactory(SimpleClientHttpRequestFactory.class).setReadTimeout(1234) - .build().getRequestFactory(); + .requestFactory(SimpleClientHttpRequestFactory.class) + .setReadTimeout(Duration.ofMillis(1234)).build().getRequestFactory(); assertThat(ReflectionTestUtils.getField(requestFactory, "readTimeout")) .isEqualTo(1234); } @@ -475,7 +477,7 @@ public class RestTemplateBuilderTests { public void connectTimeoutCanBeConfiguredOnOkHttp3RequestFactory() { ClientHttpRequestFactory requestFactory = this.builder .requestFactory(OkHttp3ClientHttpRequestFactory.class) - .setConnectTimeout(1234).build().getRequestFactory(); + .setConnectTimeout(Duration.ofMillis(1234)).build().getRequestFactory(); assertThat(ReflectionTestUtils.getField( ReflectionTestUtils.getField(requestFactory, "client"), "connectTimeout")) .isEqualTo(1234); @@ -485,7 +487,7 @@ public class RestTemplateBuilderTests { public void readTimeoutCanBeConfiguredOnOkHttp3RequestFactory() { ClientHttpRequestFactory requestFactory = this.builder .requestFactory(OkHttp3ClientHttpRequestFactory.class) - .setReadTimeout(1234).build().getRequestFactory(); + .setReadTimeout(Duration.ofMillis(1234)).build().getRequestFactory(); assertThat(ReflectionTestUtils.getField( ReflectionTestUtils.getField(requestFactory, "client"), "readTimeout")) .isEqualTo(1234); @@ -497,7 +499,7 @@ public class RestTemplateBuilderTests { this.builder .requestFactory( () -> new BufferingClientHttpRequestFactory(requestFactory)) - .setConnectTimeout(1234).build(); + .setConnectTimeout(Duration.ofMillis(1234)).build(); assertThat(ReflectionTestUtils.getField(requestFactory, "connectTimeout")) .isEqualTo(1234); } @@ -508,7 +510,7 @@ public class RestTemplateBuilderTests { this.builder .requestFactory( () -> new BufferingClientHttpRequestFactory(requestFactory)) - .setReadTimeout(1234).build(); + .setReadTimeout(Duration.ofMillis(1234)).build(); assertThat(ReflectionTestUtils.getField(requestFactory, "readTimeout")) .isEqualTo(1234); } @@ -524,6 +526,46 @@ public class RestTemplateBuilderTests { .isInstanceOf(BufferingClientHttpRequestFactory.class); } + @Test + @SuppressWarnings("deprecation") + public void deprecatedReadTimeout() { + ClientHttpRequestFactory requestFactory = this.builder + .requestFactory(SimpleClientHttpRequestFactory.class).setReadTimeout(1234) + .build().getRequestFactory(); + assertThat(ReflectionTestUtils.getField(requestFactory, "readTimeout")) + .isEqualTo(1234); + } + + @Test + @SuppressWarnings("deprecation") + public void deprecatedConnectTimeout() { + ClientHttpRequestFactory requestFactory = this.builder + .requestFactory(SimpleClientHttpRequestFactory.class) + .setConnectTimeout(1234).build().getRequestFactory(); + assertThat(ReflectionTestUtils.getField(requestFactory, "connectTimeout")) + .isEqualTo(1234); + } + + @Test + public void readTimeoutShouldBeIgnored() { + ClientHttpRequestFactory requestFactory = this.builder + .requestFactory(SimpleClientHttpRequestFactory.class) + .setReadTimeout(Duration.ofSeconds(5)).setReadTimeout(null).build() + .getRequestFactory(); + assertThat(ReflectionTestUtils.getField(requestFactory, "readTimeout")) + .isEqualTo(-1); + } + + @Test + public void connectionTimeoutShouldBeIgnored() { + ClientHttpRequestFactory requestFactory = this.builder + .requestFactory(SimpleClientHttpRequestFactory.class) + .setConnectTimeout(Duration.ofSeconds(5)).setConnectTimeout(null).build() + .getRequestFactory(); + assertThat(ReflectionTestUtils.getField(requestFactory, "connectTimeout")) + .isEqualTo(-1); + } + public static class RestTemplateSubclass extends RestTemplate { } From e9c3df4ad2a3bab74a9e75be7fbff360f5d29260 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Tue, 5 Jun 2018 15:54:53 +0200 Subject: [PATCH 3/3] Polish "Add duration support for setConnectTimeout and setReadTimeout" Closes gh-13355 --- .../web/client/RestTemplateBuilderTests.java | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java index 0c8a13315f..25bf0974b1 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTests.java @@ -392,7 +392,7 @@ public class RestTemplateBuilderTests { } @Test - public void customizerShouldBeAppliedAtTheEnd() { + public void customizerShouldBeAppliedInTheEnd() { ResponseErrorHandler errorHandler = mock(ResponseErrorHandler.class); ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); this.builder.interceptors(this.interceptor) @@ -437,6 +437,26 @@ public class RestTemplateBuilderTests { .isInstanceOf(HttpComponentsClientHttpRequestFactory.class); } + @Test + public void connectTimeoutCanBeNullToUseDefault() { + ClientHttpRequestFactory requestFactory = this.builder + .requestFactory(SimpleClientHttpRequestFactory.class) + .setConnectTimeout(Duration.ofSeconds(5)).setConnectTimeout(null).build() + .getRequestFactory(); + assertThat(ReflectionTestUtils.getField(requestFactory, "connectTimeout")) + .isEqualTo(-1); + } + + @Test + public void readTimeoutCanBeNullToUseDefault() { + ClientHttpRequestFactory requestFactory = this.builder + .requestFactory(SimpleClientHttpRequestFactory.class) + .setReadTimeout(Duration.ofSeconds(5)).setReadTimeout(null).build() + .getRequestFactory(); + assertThat(ReflectionTestUtils.getField(requestFactory, "readTimeout")) + .isEqualTo(-1); + } + @Test public void connectTimeoutCanBeConfiguredOnHttpComponentsRequestFactory() { ClientHttpRequestFactory requestFactory = this.builder @@ -528,17 +548,7 @@ public class RestTemplateBuilderTests { @Test @SuppressWarnings("deprecation") - public void deprecatedReadTimeout() { - ClientHttpRequestFactory requestFactory = this.builder - .requestFactory(SimpleClientHttpRequestFactory.class).setReadTimeout(1234) - .build().getRequestFactory(); - assertThat(ReflectionTestUtils.getField(requestFactory, "readTimeout")) - .isEqualTo(1234); - } - - @Test - @SuppressWarnings("deprecation") - public void deprecatedConnectTimeout() { + public void connectTimeoutCanBeSetWithInteger() { ClientHttpRequestFactory requestFactory = this.builder .requestFactory(SimpleClientHttpRequestFactory.class) .setConnectTimeout(1234).build().getRequestFactory(); @@ -547,23 +557,13 @@ public class RestTemplateBuilderTests { } @Test - public void readTimeoutShouldBeIgnored() { + @SuppressWarnings("deprecation") + public void readTimeoutCanBeSetWithInteger() { ClientHttpRequestFactory requestFactory = this.builder - .requestFactory(SimpleClientHttpRequestFactory.class) - .setReadTimeout(Duration.ofSeconds(5)).setReadTimeout(null).build() - .getRequestFactory(); + .requestFactory(SimpleClientHttpRequestFactory.class).setReadTimeout(1234) + .build().getRequestFactory(); assertThat(ReflectionTestUtils.getField(requestFactory, "readTimeout")) - .isEqualTo(-1); - } - - @Test - public void connectionTimeoutShouldBeIgnored() { - ClientHttpRequestFactory requestFactory = this.builder - .requestFactory(SimpleClientHttpRequestFactory.class) - .setConnectTimeout(Duration.ofSeconds(5)).setConnectTimeout(null).build() - .getRequestFactory(); - assertThat(ReflectionTestUtils.getField(requestFactory, "connectTimeout")) - .isEqualTo(-1); + .isEqualTo(1234); } public static class RestTemplateSubclass extends RestTemplate {