From fc8f55fbf44bd54e8e09de5858f8dbedb21fa9a5 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 18 Feb 2022 09:41:55 +0000 Subject: [PATCH] Upgrade to OkHTTP 4.9.3 Closes gh-18506 --- .../spring-boot-dependencies/build.gradle | 7 +- .../web/client/RestTemplateBuilderTests.java | 12 ++-- .../RestTemplateBuilderTestsOkHttp3Tests.java | 66 +++++++++++++++++++ 3 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTestsOkHttp3Tests.java diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle index 8be3778d63..59764a9fbf 100644 --- a/spring-boot-project/spring-boot-dependencies/build.gradle +++ b/spring-boot-project/spring-boot-dependencies/build.gradle @@ -1326,19 +1326,16 @@ bom { ] } } - library("OkHttp3", "3.14.9") { - prohibit("[4.0.0-alpha01,)") { - because "it requires Kotlin" - } + library("OkHttp", "4.9.3") { group("com.squareup.okhttp3") { modules = [ "logging-interceptor", "mockwebserver", "okcurl", "okhttp", + "okhttp-brotli", "okhttp-dnsoverhttps", "okhttp-sse", - "okhttp-testing-support", "okhttp-tls", "okhttp-urlconnection" ] 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 45ca08e663..230b9c9306 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 @@ -24,7 +24,9 @@ import java.util.Collections; import java.util.Set; import java.util.function.Supplier; +import okhttp3.OkHttpClient; import org.apache.http.client.config.RequestConfig; +import org.assertj.core.api.InstanceOfAssertFactories; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InOrder; @@ -523,19 +525,19 @@ class RestTemplateBuilderTests { } @Test - void connectTimeoutCanBeConfiguredOnOkHttp3RequestFactory() { + void connectTimeoutCanBeConfiguredOnOkHttpRequestFactory() { ClientHttpRequestFactory requestFactory = this.builder.requestFactory(OkHttp3ClientHttpRequestFactory.class) .setConnectTimeout(Duration.ofMillis(1234)).build().getRequestFactory(); - assertThat( - ReflectionTestUtils.getField(ReflectionTestUtils.getField(requestFactory, "client"), "connectTimeout")) - .isEqualTo(1234); + assertThat(requestFactory).extracting("client", InstanceOfAssertFactories.type(OkHttpClient.class)) + .extracting(OkHttpClient::connectTimeoutMillis).isEqualTo(1234); } @Test void readTimeoutCanBeConfiguredOnOkHttp3RequestFactory() { ClientHttpRequestFactory requestFactory = this.builder.requestFactory(OkHttp3ClientHttpRequestFactory.class) .setReadTimeout(Duration.ofMillis(1234)).build().getRequestFactory(); - assertThat(requestFactory).extracting("client").extracting("readTimeout").isEqualTo(1234); + assertThat(requestFactory).extracting("client", InstanceOfAssertFactories.type(OkHttpClient.class)) + .extracting(OkHttpClient::readTimeoutMillis).isEqualTo(1234); } @Test diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTestsOkHttp3Tests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTestsOkHttp3Tests.java new file mode 100644 index 0000000000..24b6c20e19 --- /dev/null +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/RestTemplateBuilderTestsOkHttp3Tests.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012-2022 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.web.client; + +import java.time.Duration; + +import okhttp3.OkHttpClient; +import org.assertj.core.api.InstanceOfAssertFactories; +import org.junit.jupiter.api.Test; + +import org.springframework.boot.testsupport.classpath.ClassPathOverrides; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalStateException; + +/** + * Tests for {@link RestTemplateBuilder} with OkHttp 3.x. + * + * @author Andy Wilkinson + */ +@ClassPathOverrides("com.squareup.okhttp3:okhttp:3.14.9") +class RestTemplateBuilderTestsOkHttp3Tests { + + private RestTemplateBuilder builder = new RestTemplateBuilder(); + + @Test + void connectTimeoutCanBeConfiguredOnOkHttpRequestFactory() { + ClientHttpRequestFactory requestFactory = this.builder.requestFactory(OkHttp3ClientHttpRequestFactory.class) + .setConnectTimeout(Duration.ofMillis(1234)).build().getRequestFactory(); + assertThat(requestFactory).extracting("client", InstanceOfAssertFactories.type(OkHttpClient.class)) + .extracting(OkHttpClient::connectTimeoutMillis).isEqualTo(1234); + } + + @Test + void readTimeoutCanBeConfiguredOnOkHttpRequestFactory() { + ClientHttpRequestFactory requestFactory = this.builder.requestFactory(OkHttp3ClientHttpRequestFactory.class) + .setReadTimeout(Duration.ofMillis(1234)).build().getRequestFactory(); + assertThat(requestFactory).extracting("client", InstanceOfAssertFactories.type(OkHttpClient.class)) + .extracting(OkHttpClient::readTimeoutMillis).isEqualTo(1234); + } + + @Test + void bufferRequestBodyCanNotBeConfiguredOnOkHttpRequestFactory() { + assertThatIllegalStateException() + .isThrownBy(() -> this.builder.requestFactory(OkHttp3ClientHttpRequestFactory.class) + .setBufferRequestBody(false).build().getRequestFactory()) + .withMessageContaining(OkHttp3ClientHttpRequestFactory.class.getName()); + } + +}