From 53f190b912660a5275edfae3f14bb7c91ac91b82 Mon Sep 17 00:00:00 2001 From: Thomas Farr Date: Mon, 11 Nov 2024 23:19:43 +1300 Subject: [PATCH] Handle HttpURLConnection switching GET->POST and not supporting PATCH --- ...nnectionHttpClientDefaultWireMockTest.java | 21 +++++++++++++++++++ .../http/SdkHttpClientDefaultTestSuite.java | 11 ++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/http-clients/url-connection-client/src/test/java/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClientDefaultWireMockTest.java b/http-clients/url-connection-client/src/test/java/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClientDefaultWireMockTest.java index 66cbc4e3b814..12960c82dbcf 100644 --- a/http-clients/url-connection-client/src/test/java/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClientDefaultWireMockTest.java +++ b/http-clients/url-connection-client/src/test/java/software/amazon/awssdk/http/urlconnection/UrlConnectionHttpClientDefaultWireMockTest.java @@ -15,11 +15,16 @@ package software.amazon.awssdk.http.urlconnection; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.net.ProtocolException; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLSocketFactory; +import org.junit.Test; import org.junit.jupiter.api.AfterEach; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.SdkHttpClientDefaultTestSuite; +import software.amazon.awssdk.http.SdkHttpMethod; public class UrlConnectionHttpClientDefaultWireMockTest extends SdkHttpClientDefaultTestSuite { @@ -32,4 +37,20 @@ protected SdkHttpClient createSdkHttpClient() { public void reset() { HttpsURLConnection.setDefaultSSLSocketFactory((SSLSocketFactory) SSLSocketFactory.getDefault()); } + + @Test + @Override + public void supportsRequestBodyOnGetRequest() throws Exception { + // HttpURLConnection is hard-coded to switch GET requests with a body to POST requests, in #getOutputStream0. + testForResponseCode(200, SdkHttpMethod.GET, SdkHttpMethod.POST, true); + } + + @Test + @Override + public void supportsRequestBodyOnPatchRequest() { + // HttpURLConnection does not support PATCH requests. + assertThatThrownBy(super::supportsRequestBodyOnPatchRequest) + .hasRootCauseInstanceOf(ProtocolException.class) + .hasRootCauseMessage("Invalid HTTP method: PATCH"); + } } diff --git a/test/http-client-tests/src/main/java/software/amazon/awssdk/http/SdkHttpClientDefaultTestSuite.java b/test/http-client-tests/src/main/java/software/amazon/awssdk/http/SdkHttpClientDefaultTestSuite.java index d0bc57261a8b..22b55cc6192b 100644 --- a/test/http-client-tests/src/main/java/software/amazon/awssdk/http/SdkHttpClientDefaultTestSuite.java +++ b/test/http-client-tests/src/main/java/software/amazon/awssdk/http/SdkHttpClientDefaultTestSuite.java @@ -143,7 +143,14 @@ private void testForResponseCode(int returnCode) throws Exception { testForResponseCode(returnCode, SdkHttpMethod.POST, true); } - private void testForResponseCode(int returnCode, SdkHttpMethod method, boolean includeBody) throws Exception { + protected void testForResponseCode(int returnCode, SdkHttpMethod method, boolean includeBody) throws Exception { + testForResponseCode(returnCode, method, method, includeBody); + } + + protected void testForResponseCode(int returnCode, + SdkHttpMethod method, + SdkHttpMethod expectedMethod, + boolean includeBody) throws Exception { SdkHttpClient client = createSdkHttpClient(); stubForMockRequest(returnCode); @@ -156,7 +163,7 @@ private void testForResponseCode(int returnCode, SdkHttpMethod method, boolean i .build()) .call(); - validateResponse(rsp, returnCode, method, includeBody); + validateResponse(rsp, returnCode, expectedMethod, includeBody); } protected void testForResponseCodeUsingHttps(SdkHttpClient client, int returnCode) throws Exception {