|
20 | 20 | import java.lang.reflect.Method;
|
21 | 21 | import java.lang.reflect.Modifier;
|
22 | 22 | import java.net.URI;
|
| 23 | +import java.net.http.HttpClient; |
| 24 | +import java.net.http.HttpClient.Redirect; |
23 | 25 | import java.util.Base64;
|
24 | 26 | import java.util.stream.Stream;
|
25 | 27 |
|
26 | 28 | import org.apache.hc.client5.http.config.RequestConfig;
|
27 | 29 | import org.junit.jupiter.api.Test;
|
28 | 30 |
|
| 31 | +import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder; |
| 32 | +import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects; |
29 | 33 | import org.springframework.boot.test.web.client.TestRestTemplate.CustomHttpComponentsClientHttpRequestFactory;
|
30 | 34 | import org.springframework.boot.test.web.client.TestRestTemplate.HttpClientOption;
|
31 | 35 | import org.springframework.boot.web.client.RestTemplateBuilder;
|
|
38 | 42 | import org.springframework.http.client.ClientHttpRequest;
|
39 | 43 | import org.springframework.http.client.ClientHttpRequestFactory;
|
40 | 44 | import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
| 45 | +import org.springframework.http.client.JdkClientHttpRequestFactory; |
41 | 46 | import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
42 | 47 | import org.springframework.mock.env.MockEnvironment;
|
43 | 48 | import org.springframework.mock.http.client.MockClientHttpRequest;
|
|
66 | 71 | * @author Stephane Nicoll
|
67 | 72 | * @author Andy Wilkinson
|
68 | 73 | * @author Kristine Jetzke
|
| 74 | + * @author Yanming Zhou |
69 | 75 | */
|
70 | 76 | class TestRestTemplateTests {
|
71 | 77 |
|
@@ -131,12 +137,53 @@ void authenticated() {
|
131 | 137 |
|
132 | 138 | @Test
|
133 | 139 | void options() {
|
134 |
| - TestRestTemplate template = new TestRestTemplate(HttpClientOption.ENABLE_REDIRECTS); |
| 140 | + RequestConfig config = getRequestConfig( |
| 141 | + new TestRestTemplate(HttpClientOption.ENABLE_REDIRECTS, HttpClientOption.ENABLE_COOKIES)); |
| 142 | + assertThat(config.isRedirectsEnabled()).isTrue(); |
| 143 | + assertThat(config.getCookieSpec()).isEqualTo("strict"); |
| 144 | + } |
| 145 | + |
| 146 | + @Test |
| 147 | + void jdkBuilderCanBeSpecifiedWithSpecificRedirects() { |
| 148 | + RestTemplateBuilder builder = new RestTemplateBuilder() |
| 149 | + .requestFactoryBuilder(ClientHttpRequestFactoryBuilder.jdk()); |
| 150 | + TestRestTemplate templateWithRedirects = new TestRestTemplate(builder.redirects(Redirects.FOLLOW)); |
| 151 | + assertThat(getJdkHttpClient(templateWithRedirects).followRedirects()).isEqualTo(Redirect.NORMAL); |
| 152 | + TestRestTemplate templateWithoutRedirects = new TestRestTemplate(builder.redirects(Redirects.DONT_FOLLOW)); |
| 153 | + assertThat(getJdkHttpClient(templateWithoutRedirects).followRedirects()).isEqualTo(Redirect.NEVER); |
| 154 | + } |
| 155 | + |
| 156 | + @Test |
| 157 | + void httpComponentsAreBuildConsideringSettingsInRestTemplateBuilder() { |
| 158 | + RestTemplateBuilder builder = new RestTemplateBuilder() |
| 159 | + .requestFactoryBuilder(ClientHttpRequestFactoryBuilder.httpComponents()); |
| 160 | + assertThat(getRequestConfig((RestTemplateBuilder) null).isRedirectsEnabled()).isTrue(); |
| 161 | + assertThat(getRequestConfig(null, HttpClientOption.ENABLE_REDIRECTS).isRedirectsEnabled()).isTrue(); |
| 162 | + assertThat(getRequestConfig(builder).isRedirectsEnabled()).isTrue(); |
| 163 | + assertThat(getRequestConfig(builder, HttpClientOption.ENABLE_REDIRECTS).isRedirectsEnabled()).isTrue(); |
| 164 | + assertThat(getRequestConfig(builder.redirects(Redirects.DONT_FOLLOW)).isRedirectsEnabled()).isFalse(); |
| 165 | + assertThat(getRequestConfig(builder.redirects(Redirects.DONT_FOLLOW), HttpClientOption.ENABLE_REDIRECTS) |
| 166 | + .isRedirectsEnabled()).isTrue(); |
| 167 | + } |
| 168 | + |
| 169 | + private RequestConfig getRequestConfig(RestTemplateBuilder builder, HttpClientOption... httpClientOptions) { |
| 170 | + builder = (builder != null) ? builder : new RestTemplateBuilder(); |
| 171 | + TestRestTemplate template = new TestRestTemplate(builder, null, null, httpClientOptions); |
| 172 | + return getRequestConfig(template); |
| 173 | + } |
| 174 | + |
| 175 | + private RequestConfig getRequestConfig(TestRestTemplate template) { |
135 | 176 | CustomHttpComponentsClientHttpRequestFactory factory = (CustomHttpComponentsClientHttpRequestFactory) template
|
136 | 177 | .getRestTemplate()
|
137 | 178 | .getRequestFactory();
|
138 |
| - RequestConfig config = factory.createRequestConfig(); |
139 |
| - assertThat(config.isRedirectsEnabled()).isTrue(); |
| 179 | + return factory.createRequestConfig(); |
| 180 | + } |
| 181 | + |
| 182 | + private HttpClient getJdkHttpClient(TestRestTemplate templateWithRedirects) { |
| 183 | + JdkClientHttpRequestFactory requestFactory = (JdkClientHttpRequestFactory) templateWithRedirects |
| 184 | + .getRestTemplate() |
| 185 | + .getRequestFactory(); |
| 186 | + return (HttpClient) ReflectionTestUtils.getField(requestFactory, "httpClient"); |
140 | 187 | }
|
141 | 188 |
|
142 | 189 | @Test
|
|
0 commit comments