|
21 | 21 |
|
22 | 22 | import java.net.URI; |
23 | 23 | import java.time.Duration; |
24 | | -import java.util.List; |
25 | | -import java.util.Map; |
26 | 24 | import org.junit.jupiter.api.BeforeEach; |
27 | 25 | import org.junit.jupiter.api.Test; |
28 | 26 | import org.mockito.ArgumentCaptor; |
@@ -189,6 +187,54 @@ void execute_resolverReceivesRequestFromInterceptorContext() throws Exception { |
189 | 187 | assertThat(capturedRequest[0]).isSameAs(modifiedRequest); |
190 | 188 | } |
191 | 189 |
|
| 190 | + @Test |
| 191 | + void execute_interceptorModifiedHost_preservesCustomHostAndScheme() throws Exception { |
| 192 | + Endpoint endpoint = Endpoint.builder().url(URI.create("https://resolved.amazonaws.com")).build(); |
| 193 | + SdkHttpFullRequest.Builder request = SdkHttpFullRequest.builder() |
| 194 | + .method(SdkHttpMethod.GET) |
| 195 | + .protocol("http") |
| 196 | + .host("custom.example.com") |
| 197 | + .port(8080) |
| 198 | + .encodedPath("/my-operation"); |
| 199 | + executionAttributes.putAttribute(SdkInternalExecutionAttribute.HTTP_REQUEST_URI_BEFORE_MODIFY, |
| 200 | + URI.create("https://myservice.amazonaws.com/my-operation")); |
| 201 | + executionAttributes.putAttribute(SdkInternalExecutionAttribute.ENDPOINT_RESOLVER, (req, attrs) -> endpoint); |
| 202 | + executionAttributes.putAttribute(SdkInternalExecutionAttribute.CLIENT_ENDPOINT_PROVIDER, |
| 203 | + ClientEndpointProvider.forEndpointOverride(CLIENT_ENDPOINT)); |
| 204 | + RequestExecutionContext context = createContext(); |
| 205 | + |
| 206 | + SdkHttpFullRequest.Builder result = stage.execute(request, context); |
| 207 | + |
| 208 | + assertThat(result.host()).isEqualTo("custom.example.com"); |
| 209 | + assertThat(result.protocol()).isEqualTo("http"); |
| 210 | + assertThat(result.port()).isEqualTo(8080); |
| 211 | + } |
| 212 | + |
| 213 | + @Test |
| 214 | + void execute_interceptorModifiedHost_stillAppliesResolvedPath() throws Exception { |
| 215 | + URI clientEndpoint = URI.create("https://s3.us-west-2.amazonaws.com"); |
| 216 | + URI resolvedUri = URI.create("https://s3.us-west-2.amazonaws.com/my-bucket"); |
| 217 | + |
| 218 | + Endpoint endpoint = Endpoint.builder().url(resolvedUri).build(); |
| 219 | + SdkHttpFullRequest.Builder request = SdkHttpFullRequest.builder() |
| 220 | + .method(SdkHttpMethod.GET) |
| 221 | + .protocol("https") |
| 222 | + .host("example.com") |
| 223 | + .encodedPath("/my-key"); |
| 224 | + |
| 225 | + executionAttributes.putAttribute(SdkInternalExecutionAttribute.HTTP_REQUEST_URI_BEFORE_MODIFY, |
| 226 | + URI.create("https://s3.us-west-2.amazonaws.com/my-key")); |
| 227 | + executionAttributes.putAttribute(SdkInternalExecutionAttribute.ENDPOINT_RESOLVER, (req, attrs) -> endpoint); |
| 228 | + executionAttributes.putAttribute(SdkInternalExecutionAttribute.CLIENT_ENDPOINT_PROVIDER, |
| 229 | + ClientEndpointProvider.forEndpointOverride(clientEndpoint)); |
| 230 | + RequestExecutionContext context = createContext(); |
| 231 | + |
| 232 | + SdkHttpFullRequest.Builder result = stage.execute(request, context); |
| 233 | + |
| 234 | + assertThat(result.host()).isEqualTo("example.com"); |
| 235 | + assertThat(result.encodedPath()).isEqualTo("/my-bucket/my-key"); |
| 236 | + } |
| 237 | + |
192 | 238 | private SdkHttpFullRequest.Builder defaultRequest() { |
193 | 239 | return SdkHttpFullRequest.builder() |
194 | 240 | .method(SdkHttpMethod.GET) |
|
0 commit comments