WebTestClient.mutate() should not impact future .mutate() invocations

Issue: SPR-16059
This commit is contained in:
Arjen Poutsma
2017-10-13 16:54:30 +02:00
parent 6e71664a60
commit 24ca8ccf5a
3 changed files with 45 additions and 8 deletions

View File

@@ -66,13 +66,13 @@ class DefaultWebTestClient implements WebTestClient {
private final Duration timeout;
private final WebTestClient.Builder builder;
private final DefaultWebTestClientBuilder builder;
private final AtomicLong requestIndex = new AtomicLong();
DefaultWebTestClient(WebClient.Builder clientBuilder, ClientHttpConnector connector,
@Nullable Duration timeout, WebTestClient.Builder webTestClientBuilder) {
@Nullable Duration timeout, DefaultWebTestClientBuilder webTestClientBuilder) {
Assert.notNull(clientBuilder, "WebClient.Builder is required");
this.wiretapConnector = new WiretapConnector(connector);
@@ -133,7 +133,7 @@ class DefaultWebTestClient implements WebTestClient {
@Override
public Builder mutate() {
return this.builder;
return new DefaultWebTestClientBuilder(this.builder);
}
@Override

View File

@@ -60,6 +60,11 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
this(null, httpHandlerBuilder, null, null);
}
DefaultWebTestClientBuilder(DefaultWebTestClientBuilder other) {
this(other.webClientBuilder.clone(), other.httpHandlerBuilder, other.connector,
other.responseTimeout);
}
DefaultWebTestClientBuilder(@Nullable WebClient.Builder webClientBuilder,
@Nullable WebHttpHandlerBuilder httpHandlerBuilder, @Nullable ClientHttpConnector connector,
@Nullable Duration responseTimeout) {
@@ -150,12 +155,8 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
connectorToUse = new HttpHandlerConnector(this.httpHandlerBuilder.build());
}
DefaultWebTestClientBuilder webTestClientBuilder = new DefaultWebTestClientBuilder(
this.webClientBuilder.clone(), this.httpHandlerBuilder,
this.connector, this.responseTimeout);
return new DefaultWebTestClient(this.webClientBuilder,
connectorToUse, this.responseTimeout, webTestClientBuilder);
connectorToUse, this.responseTimeout, new DefaultWebTestClientBuilder(this));
}
}