From 1452d3cd51579d1f4e15dff705f3a44db517395b Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Tue, 22 Nov 2016 10:58:30 -0800 Subject: [PATCH] Ensure withBasicAuth keeps error handler Fix `TestRestTemplate` so that any custom `ErrorHandler` isn't lost when calling `withBasicAuth`. Fixes gh-7441 --- .../test/web/client/TestRestTemplate.java | 8 +++-- .../web/client/TestRestTemplateTests.java | 36 +++++++++++-------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java b/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java index 2441537483..b3ab49bfd8 100644 --- a/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java +++ b/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java @@ -916,14 +916,16 @@ public class TestRestTemplate { */ public TestRestTemplate withBasicAuth(String username, String password) { RestTemplate restTemplate = new RestTemplate(); - restTemplate.setErrorHandler(getRestTemplate().getErrorHandler()); restTemplate.setMessageConverters(getRestTemplate().getMessageConverters()); restTemplate.setInterceptors( removeBasicAuthInterceptorIfPresent(getRestTemplate().getInterceptors())); restTemplate.setRequestFactory(getRestTemplate().getRequestFactory()); restTemplate.setUriTemplateHandler(getRestTemplate().getUriTemplateHandler()); - return new TestRestTemplate(restTemplate, username, password, - this.httpClientOptions); + TestRestTemplate testRestTemplate = new TestRestTemplate(restTemplate, username, + password, this.httpClientOptions); + testRestTemplate.getRestTemplate() + .setErrorHandler(getRestTemplate().getErrorHandler()); + return testRestTemplate; } private List removeBasicAuthInterceptorIfPresent( diff --git a/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java b/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java index 68169d005b..81796e2963 100644 --- a/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java +++ b/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java @@ -34,6 +34,7 @@ import org.springframework.http.client.support.BasicAuthorizationInterceptor; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.util.ReflectionUtils; import org.springframework.util.ReflectionUtils.MethodCallback; +import org.springframework.web.client.ResponseErrorHandler; import org.springframework.web.client.RestOperations; import org.springframework.web.client.RestTemplate; @@ -157,25 +158,32 @@ public class TestRestTemplateTests { @Test public void withBasicAuthReplacesBasicAuthInterceptorWhenAlreadyPresent() { - TestRestTemplate originalTemplate = new TestRestTemplate("foo", "bar"); - TestRestTemplate basicAuthTemplate = originalTemplate.withBasicAuth("user", - "password"); - assertThat(basicAuthTemplate.getRestTemplate().getMessageConverters()) + TestRestTemplate original = new TestRestTemplate("foo", "bar"); + TestRestTemplate basicAuth = original.withBasicAuth("user", "password"); + assertThat(basicAuth.getRestTemplate().getMessageConverters()) .containsExactlyElementsOf( - originalTemplate.getRestTemplate().getMessageConverters()); - assertThat(basicAuthTemplate.getRestTemplate().getRequestFactory()) + original.getRestTemplate().getMessageConverters()); + assertThat(basicAuth.getRestTemplate().getRequestFactory()) .isInstanceOf(InterceptingClientHttpRequestFactory.class); assertThat(ReflectionTestUtils.getField( - basicAuthTemplate.getRestTemplate().getRequestFactory(), - "requestFactory")) + basicAuth.getRestTemplate().getRequestFactory(), "requestFactory")) .isInstanceOf(CustomHttpComponentsClientHttpRequestFactory.class); - assertThat(basicAuthTemplate.getRestTemplate().getUriTemplateHandler()) - .isSameAs(originalTemplate.getRestTemplate().getUriTemplateHandler()); - assertThat(basicAuthTemplate.getRestTemplate().getInterceptors()) - .containsExactlyElementsOf( - originalTemplate.getRestTemplate().getInterceptors()); - assertBasicAuthorizationInterceptorCredentials(basicAuthTemplate, "user", + assertThat(basicAuth.getRestTemplate().getUriTemplateHandler()) + .isSameAs(original.getRestTemplate().getUriTemplateHandler()); + assertThat(basicAuth.getRestTemplate().getInterceptors()) + .containsExactlyElementsOf(original.getRestTemplate().getInterceptors()); + assertBasicAuthorizationInterceptorCredentials(basicAuth, "user", "password"); + } + + @Test + public void withBasicAuthDoesNotResetErrorHandler() throws Exception { + TestRestTemplate originalTemplate = new TestRestTemplate("foo", "bar"); + ResponseErrorHandler errorHandler = mock(ResponseErrorHandler.class); + originalTemplate.getRestTemplate().setErrorHandler(errorHandler); + TestRestTemplate basicAuthTemplate = originalTemplate.withBasicAuth("user", "password"); + assertThat(basicAuthTemplate.getRestTemplate().getErrorHandler()) + .isSameAs(errorHandler); } private void assertBasicAuthorizationInterceptorCredentials(