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

Before this commit, when adding filters to a builder obtained via
`WebClient.mutate()`, the filters were added both to the original client
as well as the mutated builder. This commit fixes that.

Issue: SPR-16059
master
Arjen Poutsma 7 years ago
parent 2962f085e5
commit faa74988c4
  1. 2
      spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClient.java
  2. 19
      spring-webflux/src/test/java/org/springframework/web/reactive/function/client/DefaultWebClientTests.java

@ -142,7 +142,7 @@ class DefaultWebClient implements WebClient {
@Override
public Builder mutate() {
return this.builder;
return new DefaultWebClientBuilder(this.builder);
}

@ -31,10 +31,8 @@ import reactor.test.StepVerifier;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
/**
* Unit tests for {@link DefaultWebClient}.
@ -136,17 +134,30 @@ public class DefaultWebClientTests {
builder.defaultHeader("foo", "bar");
builder.defaultCookie("foo", "bar");
WebClient client1 = builder.build();
builder.filter((request, next) -> next.exchange(request));
builder.defaultHeader("baz", "qux");
builder.defaultCookie("baz", "qux");
WebClient client2 = builder.build();
WebClient.Builder mutatedBuilder = client1.mutate();
mutatedBuilder.filter((request, next) -> next.exchange(request));
mutatedBuilder.defaultHeader("baz", "qux");
mutatedBuilder.defaultCookie("baz", "qux");
WebClient clientFromMutatedBuilder = mutatedBuilder.build();
client1.mutate().filters(filters -> assertEquals(1, filters.size()));
client1.mutate().defaultHeaders(headers -> assertEquals(1, headers.size()));
client1.mutate().defaultCookies(cookies -> assertEquals(1, cookies.size()));
client2.mutate().filters(filters -> assertEquals(2, filters.size()));
client2.mutate().defaultHeaders(headers -> assertEquals(2, headers.size()));
client2.mutate().defaultCookies(cookies -> assertEquals(2, cookies.size()));
clientFromMutatedBuilder.mutate().filters(filters -> assertEquals(2, filters.size()));
clientFromMutatedBuilder.mutate().defaultHeaders(headers -> assertEquals(2, headers.size()));
clientFromMutatedBuilder.mutate().defaultCookies(cookies -> assertEquals(2, cookies.size()));
}
@Test

Loading…
Cancel
Save