From 7ea87705246d47ae2286aab2b713849c38324589 Mon Sep 17 00:00:00 2001 From: Madhura Bhave Date: Mon, 18 Mar 2019 17:49:41 -0700 Subject: [PATCH] Polish "Fix request factory used with withBasicAuth" Fixes gh-15982 --- .../test/web/client/TestRestTemplate.java | 6 ++-- .../web/client/TestRestTemplateTests.java | 31 ++++++++++++++++++- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java index 3395f51016..4c975e2c55 100644 --- a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java +++ b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/web/client/TestRestTemplate.java @@ -1027,10 +1027,8 @@ public class TestRestTemplate { /** * Creates a new {@code TestRestTemplate} with the same configuration as this one, * except that it will send basic authorization headers using the given - * {@code username} and {@code password}. Note, that a new instance of - * {@link ClientHttpRequestFactory} will be created (if possible) based on the current - * factory class, otherwise {@link ClientHttpRequestFactorySupplier} will be used to - * instantiate a {@link ClientHttpRequestFactory}. + * {@code username} and {@code password}. The request factory used is a new instance + * of the underlying {@link RestTemplate}'s request factory type (when possible). * @param username the username * @param password the password * @return the new template diff --git a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java index 423dbd8286..ef57a8d2dc 100644 --- a/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java +++ b/spring-boot-project/spring-boot-test/src/test/java/org/springframework/boot/test/web/client/TestRestTemplateTests.java @@ -33,6 +33,7 @@ import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.RequestEntity; +import org.springframework.http.client.ClientHttpRequest; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.ClientHttpRequestInterceptor; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; @@ -97,7 +98,7 @@ public class TestRestTemplateTests { public void useTheSameRequestFactoryClassWithBasicAuth() { OkHttp3ClientHttpRequestFactory customFactory = new OkHttp3ClientHttpRequestFactory(); RestTemplateBuilder builder = new RestTemplateBuilder() - .requestFactory(OkHttp3ClientHttpRequestFactory::new); + .requestFactory(() -> customFactory); TestRestTemplate testRestTemplate = new TestRestTemplate(builder) .withBasicAuth("test", "test"); RestTemplate restTemplate = testRestTemplate.getRestTemplate(); @@ -107,6 +108,21 @@ public class TestRestTemplateTests { .hasSameClassAs(customFactory); } + @Test + public void withBasicAuthWhenRequestFactoryTypeCannotBeInstantiatedShouldFallback() { + TestClientHttpRequestFactory customFactory = new TestClientHttpRequestFactory( + "my-request-factory"); + RestTemplateBuilder builder = new RestTemplateBuilder() + .requestFactory(() -> customFactory); + TestRestTemplate testRestTemplate = new TestRestTemplate(builder) + .withBasicAuth("test", "test"); + RestTemplate restTemplate = testRestTemplate.getRestTemplate(); + Object requestFactory = ReflectionTestUtils + .getField(restTemplate.getRequestFactory(), "requestFactory"); + assertThat(requestFactory).isNotEqualTo(customFactory) + .isInstanceOf(CustomHttpComponentsClientHttpRequestFactory.class); + } + @Test public void getRootUriRootUriSetViaRestTemplateBuilder() { String rootUri = "http://example.com"; @@ -397,4 +413,17 @@ public class TestRestTemplateTests { } + static class TestClientHttpRequestFactory implements ClientHttpRequestFactory { + + TestClientHttpRequestFactory(String value) { + } + + @Override + public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) + throws IOException { + return null; + } + + } + }