From de32fab3249260616ce2b895e005bc7e98e4ef12 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 30 Sep 2020 16:03:33 +0200 Subject: [PATCH] Adapt to API change in Spring Framework 5.3.0 snapshots See gh-23534 --- ...FoundryActuatorAutoConfigurationTests.java | 7 ++-- .../WebClientMetricsConfigurationTests.java | 7 ++-- ...AbstractReactiveWebServerFactoryTests.java | 20 ++++------- .../SampleSessionWebFluxApplicationTests.java | 35 +++++++++++-------- 4 files changed, 33 insertions(+), 36 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/ReactiveCloudFoundryActuatorAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/ReactiveCloudFoundryActuatorAutoConfigurationTests.java index ec0c11fd1da..21e2a6fa0a8 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/ReactiveCloudFoundryActuatorAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/cloudfoundry/reactive/ReactiveCloudFoundryActuatorAutoConfigurationTests.java @@ -67,7 +67,6 @@ import org.springframework.security.web.server.WebFilterChainProxy; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.reactive.function.client.ClientResponse; import org.springframework.web.reactive.function.client.WebClient; import static org.assertj.core.api.Assertions.assertThat; @@ -270,7 +269,7 @@ class ReactiveCloudFoundryActuatorAutoConfigurationTests { "cloudFoundrySecurityService"); WebClient webClient = (WebClient) ReflectionTestUtils.getField(interceptorSecurityService, "webClient"); - webClient.get().uri("https://self-signed.badssl.com/").exchangeToMono(ClientResponse::releaseBody) + webClient.get().uri("https://self-signed.badssl.com/").retrieve().toBodilessEntity() .block(Duration.ofSeconds(30)); }); } @@ -288,8 +287,8 @@ class ReactiveCloudFoundryActuatorAutoConfigurationTests { WebClient webClient = (WebClient) ReflectionTestUtils.getField(interceptorSecurityService, "webClient"); assertThatExceptionOfType(RuntimeException.class) - .isThrownBy(() -> webClient.get().uri("https://self-signed.badssl.com/") - .exchangeToMono(ClientResponse::releaseBody).block(Duration.ofSeconds(30))) + .isThrownBy(() -> webClient.get().uri("https://self-signed.badssl.com/").retrieve() + .toBodilessEntity().block(Duration.ofSeconds(30))) .withCauseInstanceOf(SSLException.class); }); } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/WebClientMetricsConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/WebClientMetricsConfigurationTests.java index 2a3d6197204..6e91ddaa16e 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/WebClientMetricsConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/web/client/WebClientMetricsConfigurationTests.java @@ -38,7 +38,6 @@ import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpStatus; import org.springframework.http.client.reactive.ClientHttpConnector; import org.springframework.mock.http.client.reactive.MockClientHttpResponse; -import org.springframework.web.reactive.function.client.ClientResponse; import org.springframework.web.reactive.function.client.WebClient; import static org.assertj.core.api.Assertions.assertThat; @@ -112,7 +111,7 @@ class WebClientMetricsConfigurationTests { WebClient webClient = mockWebClient(context.getBean(WebClient.Builder.class)); MeterRegistry registry = context.getBean(MeterRegistry.class); for (int i = 0; i < 3; i++) { - webClient.get().uri("https://example.org/projects/" + i).exchangeToMono(ClientResponse::releaseBody) + webClient.get().uri("https://example.org/projects/" + i).retrieve().toBodilessEntity() .block(Duration.ofSeconds(30)); } return registry; @@ -121,8 +120,8 @@ class WebClientMetricsConfigurationTests { private void validateWebClient(WebClient.Builder builder, MeterRegistry registry) { WebClient webClient = mockWebClient(builder); assertThat(registry.find("http.client.requests").meter()).isNull(); - webClient.get().uri("https://example.org/projects/{project}", "spring-boot") - .exchangeToMono(ClientResponse::releaseBody).block(Duration.ofSeconds(30)); + webClient.get().uri("https://example.org/projects/{project}", "spring-boot").retrieve().toBodilessEntity() + .block(Duration.ofSeconds(30)); assertThat(registry.find("http.client.requests").tags("uri", "/projects/{project}").meter()).isNotNull(); } diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java index 1a7ed7191ac..457b7403fce 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/reactive/server/AbstractReactiveWebServerFactoryTests.java @@ -70,7 +70,6 @@ import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.util.SocketUtils; import org.springframework.util.unit.DataSize; import org.springframework.web.reactive.function.BodyInserters; -import org.springframework.web.reactive.function.client.ClientResponse; import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClientRequestException; @@ -282,16 +281,14 @@ public abstract class AbstractReactiveWebServerFactoryTests { @Test protected void compressionOfResponseToGetRequest() { WebClient client = prepareCompressionTest(); - ResponseEntity response = client.get().exchangeToMono(ClientResponse::toBodilessEntity) - .block(Duration.ofSeconds(30)); + ResponseEntity response = client.get().retrieve().toBodilessEntity().block(Duration.ofSeconds(30)); assertResponseIsCompressed(response); } @Test protected void compressionOfResponseToPostRequest() { WebClient client = prepareCompressionTest(); - ResponseEntity response = client.post().exchangeToMono(ClientResponse::toBodilessEntity) - .block(Duration.ofSeconds(30)); + ResponseEntity response = client.post().retrieve().toBodilessEntity().block(Duration.ofSeconds(30)); assertResponseIsCompressed(response); } @@ -301,8 +298,7 @@ public abstract class AbstractReactiveWebServerFactoryTests { compression.setEnabled(true); compression.setMinResponseSize(DataSize.ofBytes(3001)); WebClient client = prepareCompressionTest(compression); - ResponseEntity response = client.get().exchangeToMono(ClientResponse::toBodilessEntity) - .block(Duration.ofSeconds(30)); + ResponseEntity response = client.get().retrieve().toBodilessEntity().block(Duration.ofSeconds(30)); assertResponseIsNotCompressed(response); } @@ -312,8 +308,7 @@ public abstract class AbstractReactiveWebServerFactoryTests { compression.setEnabled(true); compression.setMimeTypes(new String[] { "application/json" }); WebClient client = prepareCompressionTest(compression); - ResponseEntity response = client.get().exchangeToMono(ClientResponse::toBodilessEntity) - .block(Duration.ofSeconds(30)); + ResponseEntity response = client.get().retrieve().toBodilessEntity().block(Duration.ofSeconds(30)); assertResponseIsNotCompressed(response); } @@ -323,8 +318,8 @@ public abstract class AbstractReactiveWebServerFactoryTests { compression.setEnabled(true); compression.setExcludedUserAgents(new String[] { "testUserAgent" }); WebClient client = prepareCompressionTest(compression); - ResponseEntity response = client.get().header("User-Agent", "testUserAgent") - .exchangeToMono(ClientResponse::toBodilessEntity).block(Duration.ofSeconds(30)); + ResponseEntity response = client.get().header("User-Agent", "testUserAgent").retrieve().toBodilessEntity() + .block(Duration.ofSeconds(30)); assertResponseIsNotCompressed(response); } @@ -334,8 +329,7 @@ public abstract class AbstractReactiveWebServerFactoryTests { compression.setEnabled(true); compression.setMimeTypes(new String[] { "application/json" }); WebClient client = prepareCompressionTest(compression, "test~plain"); - ResponseEntity response = client.get().exchangeToMono(ClientResponse::toBodilessEntity) - .block(Duration.ofSeconds(30)); + ResponseEntity response = client.get().retrieve().toBodilessEntity().block(Duration.ofSeconds(30)); assertResponseIsNotCompressed(response); } diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/src/test/java/smoketest/session/SampleSessionWebFluxApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/src/test/java/smoketest/session/SampleSessionWebFluxApplicationTests.java index abdcc6d06be..266951bb474 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/src/test/java/smoketest/session/SampleSessionWebFluxApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-webflux/src/test/java/smoketest/session/SampleSessionWebFluxApplicationTests.java @@ -20,13 +20,12 @@ import java.time.Duration; import java.util.Base64; import org.junit.jupiter.api.Test; +import reactor.util.function.Tuples; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.web.server.LocalServerPort; import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseCookie; -import org.springframework.web.reactive.function.client.ClientResponse; import org.springframework.web.reactive.function.client.WebClient; import static org.assertj.core.api.Assertions.assertThat; @@ -47,19 +46,25 @@ class SampleSessionWebFluxApplicationTests { private WebClient.Builder webClientBuilder; @Test - void userDefinedMappingsSecureByDefault() throws Exception { - WebClient webClient = this.webClientBuilder.baseUrl("http://localhost:" + this.port + "/").build(); - ClientResponse response = webClient.get().header("Authorization", getBasicAuth()).exchange() - .block(Duration.ofSeconds(30)); - assertThat(response.statusCode()).isEqualTo(HttpStatus.OK); - ResponseCookie sessionCookie = response.cookies().getFirst("SESSION"); - String sessionId = response.bodyToMono(String.class).block(Duration.ofSeconds(30)); - response = webClient.get().cookie("SESSION", sessionCookie.getValue()).exchange().block(Duration.ofSeconds(30)); - assertThat(response.statusCode()).isEqualTo(HttpStatus.OK); - assertThat(response.bodyToMono(String.class).block(Duration.ofSeconds(30))).isEqualTo(sessionId); - Thread.sleep(2000); - response = webClient.get().cookie("SESSION", sessionCookie.getValue()).exchange().block(Duration.ofSeconds(30)); - assertThat(response.statusCode()).isEqualTo(HttpStatus.UNAUTHORIZED); + void userDefinedMappingsSecureByDefault() { + WebClient client = this.webClientBuilder.baseUrl("http://localhost:" + this.port + "/").build(); + client.get().header("Authorization", getBasicAuth()).exchangeToMono((response) -> { + assertThat(response.statusCode()).isEqualTo(HttpStatus.OK); + return response.bodyToMono(String.class) + .map((sessionId) -> Tuples.of(response.cookies().getFirst("SESSION").getValue(), sessionId)); + }).flatMap((tuple) -> { + String sesssionCookie = tuple.getT1(); + return client.get().cookie("SESSION", sesssionCookie).exchangeToMono((response) -> { + assertThat(response.statusCode()).isEqualTo(HttpStatus.OK); + return response.bodyToMono(String.class) + .doOnNext((sessionId) -> assertThat(sessionId).isEqualTo(tuple.getT2())) + .thenReturn(sesssionCookie); + }); + }).delayElement(Duration.ofSeconds(2)) + .flatMap((sessionCookie) -> client.get().cookie("SESSION", sessionCookie).exchangeToMono((response) -> { + assertThat(response.statusCode()).isEqualTo(HttpStatus.UNAUTHORIZED); + return response.releaseBody(); + })).block(Duration.ofSeconds(30)); } private String getBasicAuth() {