|
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; |
29 | 32 | import org.springframework.boot.http.client.ClientHttpRequestFactorySettings.Redirects;
|
30 | 33 | import org.springframework.boot.test.web.client.TestRestTemplate.CustomHttpComponentsClientHttpRequestFactory;
|
31 | 34 | import org.springframework.boot.test.web.client.TestRestTemplate.HttpClientOption;
|
|
39 | 42 | import org.springframework.http.client.ClientHttpRequest;
|
40 | 43 | import org.springframework.http.client.ClientHttpRequestFactory;
|
41 | 44 | import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
| 45 | +import org.springframework.http.client.JdkClientHttpRequestFactory; |
42 | 46 | import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
43 | 47 | import org.springframework.mock.env.MockEnvironment;
|
44 | 48 | import org.springframework.mock.http.client.MockClientHttpRequest;
|
@@ -131,30 +135,55 @@ void authenticated() {
|
131 | 135 | assertBasicAuthorizationCredentials(restTemplate, "user", "password");
|
132 | 136 | }
|
133 | 137 |
|
134 |
| - @SuppressWarnings("deprecation") |
135 | 138 | @Test
|
136 | 139 | void options() {
|
137 |
| - TestRestTemplate template = new TestRestTemplate(HttpClientOption.ENABLE_REDIRECTS); |
138 |
| - CustomHttpComponentsClientHttpRequestFactory factory = (CustomHttpComponentsClientHttpRequestFactory) template |
139 |
| - .getRestTemplate() |
140 |
| - .getRequestFactory(); |
141 |
| - RequestConfig config = factory.createRequestConfig(); |
| 140 | + RequestConfig config = getRequestConfig( |
| 141 | + new TestRestTemplate(HttpClientOption.ENABLE_REDIRECTS, HttpClientOption.ENABLE_COOKIES)); |
142 | 142 | assertThat(config.isRedirectsEnabled()).isTrue();
|
| 143 | + assertThat(config.getCookieSpec()).isEqualTo("strict"); |
143 | 144 | }
|
144 | 145 |
|
145 | 146 | @Test
|
146 |
| - void redirects() { |
147 |
| - TestRestTemplate template = new TestRestTemplate().withRedirects(Redirects.DONT_FOLLOW); |
| 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) { |
148 | 176 | CustomHttpComponentsClientHttpRequestFactory factory = (CustomHttpComponentsClientHttpRequestFactory) template
|
149 | 177 | .getRestTemplate()
|
150 | 178 | .getRequestFactory();
|
151 |
| - RequestConfig config = factory.createRequestConfig(); |
152 |
| - assertThat(config.isRedirectsEnabled()).isFalse(); |
| 179 | + return factory.createRequestConfig(); |
| 180 | + } |
153 | 181 |
|
154 |
| - template = new TestRestTemplate().withRedirects(Redirects.FOLLOW); |
155 |
| - factory = (CustomHttpComponentsClientHttpRequestFactory) template.getRestTemplate().getRequestFactory(); |
156 |
| - config = factory.createRequestConfig(); |
157 |
| - assertThat(config.isRedirectsEnabled()).isTrue(); |
| 182 | + private HttpClient getJdkHttpClient(TestRestTemplate templateWithRedirects) { |
| 183 | + JdkClientHttpRequestFactory requestFactory = (JdkClientHttpRequestFactory) templateWithRedirects |
| 184 | + .getRestTemplate() |
| 185 | + .getRequestFactory(); |
| 186 | + return (HttpClient) ReflectionTestUtils.getField(requestFactory, "httpClient"); |
158 | 187 | }
|
159 | 188 |
|
160 | 189 | @Test
|
|
0 commit comments