diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle index a91f1351e9..12421a2cf8 100644 --- a/spring-boot-project/spring-boot-dependencies/build.gradle +++ b/spring-boot-project/spring-boot-dependencies/build.gradle @@ -1016,19 +1016,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()); + } + +}