From 12a9cc598065131289064ba4aac74a401b689e88 Mon Sep 17 00:00:00 2001 From: Dongie Agnir Date: Tue, 3 Feb 2026 13:56:16 -0800 Subject: [PATCH] Apache5 Integ Testing job Changes: - Add an additional job in Integ testing CI workflow to run the integration tests with Apache 5 - Update the patch so it applies cleanly after some removals - Add a -v to the apply command to make apply issues easy to see in failed CodeBuild builds - Update the policy statement used by one of the DDB integ tests because Apache 5.6 included new usage of setOption. --- .../codebuild-ci-integration-tests.yml | 16 ++ buildspecs/apache5-integ-test.yml | 4 + .../0001-Replace-Apache-4.x-with-5.x.patch | 143 +++++------------- .../security-manager-integ-test.policy | 1 + 4 files changed, 58 insertions(+), 106 deletions(-) diff --git a/.github/workflows/codebuild-ci-integration-tests.yml b/.github/workflows/codebuild-ci-integration-tests.yml index 31fc93d22e85..5e3cdcf4fe11 100644 --- a/.github/workflows/codebuild-ci-integration-tests.yml +++ b/.github/workflows/codebuild-ci-integration-tests.yml @@ -26,4 +26,20 @@ jobs: with: project-name: aws-sdk-java-v2-IntegrationTest-JDK8 hide-cloudwatch-logs: true + integration-tests-apache5: + if: github.repository == 'aws/aws-sdk-java-v2' + runs-on: ubuntu-latest + steps: + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: ${{ secrets.CI_AWS_ROLE_ARN }} + aws-region: us-west-2 + role-duration-seconds: 7200 + - name: Run Integration Test build with Apache5 + uses: aws-actions/aws-codebuild-run-build@v1 + timeout-minutes: 180 + with: + project-name: aws-sdk-java-v2-IntegrationTest-JDK8-Apache5 + hide-cloudwatch-logs: true diff --git a/buildspecs/apache5-integ-test.yml b/buildspecs/apache5-integ-test.yml index 6166785a5f51..b5d789a1cde8 100644 --- a/buildspecs/apache5-integ-test.yml +++ b/buildspecs/apache5-integ-test.yml @@ -4,6 +4,10 @@ cache: - '/root/.m2/**/*' phases: + install: + runtime-versions: + java: "$JAVA_RUNTIME" + build: commands: - | diff --git a/buildspecs/apache5-integ-test/0001-Replace-Apache-4.x-with-5.x.patch b/buildspecs/apache5-integ-test/0001-Replace-Apache-4.x-with-5.x.patch index 3d0a63c15e72..b6987e274207 100644 --- a/buildspecs/apache5-integ-test/0001-Replace-Apache-4.x-with-5.x.patch +++ b/buildspecs/apache5-integ-test/0001-Replace-Apache-4.x-with-5.x.patch @@ -1,25 +1,30 @@ -From a1c8a16ce264cee063db88040b4a10ea657ed30a Mon Sep 17 00:00:00 2001 +From 87f297257506e709b62eb97f25668fa2765ce9a3 Mon Sep 17 00:00:00 2001 From: Dongie Agnir -Date: Wed, 3 Dec 2025 14:06:14 -0800 -Subject: [PATCH] Replace Apache 4.x with 5.x +Date: Tue, 3 Feb 2026 13:54:05 -0800 +Subject: [PATCH] Replace 4.x with 5.x --- - .../CloudFrontUtilitiesIntegrationTest.java | 26 +++++++++---------- + .../CloudFrontUtilitiesIntegrationTest.java | 27 +++++++++---------- .../dynamodb/SignersIntegrationTest.java | 6 ++--- - .../MediaStoreDataIntegrationTestBase.java | 5 ---- - ...stCompressionStreamingIntegrationTest.java | 2 -- - ...ransferEncodingChunkedIntegrationTest.java | 4 +-- - services/pom.xml | 4 +-- + services/pom.xml | 2 +- services/s3/pom.xml | 6 +++++ .../S3AccessPointsIntegrationTest.java | 4 +-- .../S3MrapIntegrationTest.java | 4 +-- - 9 files changed, 30 insertions(+), 31 deletions(-) + 6 files changed, 27 insertions(+), 22 deletions(-) diff --git a/services/cloudfront/src/test/java/software/amazon/awssdk/services/cloudfront/CloudFrontUtilitiesIntegrationTest.java b/services/cloudfront/src/test/java/software/amazon/awssdk/services/cloudfront/CloudFrontUtilitiesIntegrationTest.java -index a446417b658..91cb54ea284 100644 +index 15c30c812a3..b5c924f326e 100644 --- a/services/cloudfront/src/test/java/software/amazon/awssdk/services/cloudfront/CloudFrontUtilitiesIntegrationTest.java +++ b/services/cloudfront/src/test/java/software/amazon/awssdk/services/cloudfront/CloudFrontUtilitiesIntegrationTest.java -@@ -44,7 +44,7 @@ import software.amazon.awssdk.http.HttpExecuteResponse; +@@ -25,7 +25,6 @@ import java.net.URI; + import java.nio.file.Files; + import java.nio.file.Path; + import java.nio.file.StandardOpenOption; +-import java.security.Key; + import java.security.KeyPair; + import java.security.KeyPairGenerator; + import java.security.PrivateKey; +@@ -51,7 +50,7 @@ import software.amazon.awssdk.http.HttpExecuteResponse; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.SdkHttpMethod; import software.amazon.awssdk.http.SdkHttpRequest; @@ -28,7 +33,7 @@ index a446417b658..91cb54ea284 100644 import software.amazon.awssdk.services.cloudfront.cookie.CookiesForCannedPolicy; import software.amazon.awssdk.services.cloudfront.cookie.CookiesForCustomPolicy; import software.amazon.awssdk.services.cloudfront.internal.utils.SigningUtils; -@@ -101,7 +101,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { +@@ -144,7 +143,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { @Test void unsignedUrl_shouldReturn403Response() throws Exception { @@ -37,8 +42,8 @@ index a446417b658..91cb54ea284 100644 HttpExecuteResponse response = client.prepareRequest(HttpExecuteRequest.builder() .request(SdkHttpRequest.builder() -@@ -125,7 +125,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { - .keyPairId(keyPairId) +@@ -169,7 +168,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { + .keyPairId(testCase.keyPairId) .expirationDate(expirationDate).build(); SignedUrl signedUrl = cloudFrontUtilities.getSignedUrlWithCannedPolicy(request); - SdkHttpClient client = ApacheHttpClient.create(); @@ -46,16 +51,16 @@ index a446417b658..91cb54ea284 100644 HttpExecuteResponse response = client.prepareRequest(HttpExecuteRequest.builder() .request(signedUrl.createHttpGetRequest()) .build()).call(); -@@ -143,7 +143,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { - .privateKey(privateKey) - .keyPairId(keyPairId) +@@ -188,7 +187,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { + .privateKey(testCase.privateKey) + .keyPairId(testCase.keyPairId) .expirationDate(expirationDate)); - SdkHttpClient client = ApacheHttpClient.create(); + SdkHttpClient client = Apache5HttpClient.create(); HttpExecuteResponse response = client.prepareRequest(HttpExecuteRequest.builder() .request(signedUrl.createHttpGetRequest()) .build()).call(); -@@ -163,7 +163,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { +@@ -209,7 +208,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { .expirationDate(expirationDate) .activeDate(activeDate).build(); SignedUrl signedUrl = cloudFrontUtilities.getSignedUrlWithCustomPolicy(request); @@ -64,8 +69,8 @@ index a446417b658..91cb54ea284 100644 HttpExecuteResponse response = client.prepareRequest(HttpExecuteRequest.builder() .request(signedUrl.createHttpGetRequest()) .build()).call(); -@@ -183,7 +183,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { - .keyPairId(keyPairId) +@@ -229,7 +228,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { + .keyPairId(rsaKeyPairId) .expirationDate(expirationDate) .activeDate(activeDate)); - SdkHttpClient client = ApacheHttpClient.create(); @@ -73,8 +78,8 @@ index a446417b658..91cb54ea284 100644 HttpExecuteResponse response = client.prepareRequest(HttpExecuteRequest.builder() .request(signedUrl.createHttpGetRequest()) .build()).call(); -@@ -200,7 +200,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { - .keyPairId(keyPairId) +@@ -247,7 +246,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { + .keyPairId(testCase.keyPairId) .expirationDate(expirationDate)); - SdkHttpClient client = ApacheHttpClient.create(); @@ -82,7 +87,7 @@ index a446417b658..91cb54ea284 100644 HttpExecuteResponse response = client.prepareRequest(HttpExecuteRequest.builder() .request(cookies.createHttpGetRequest()) .build()).call(); -@@ -221,7 +221,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { +@@ -268,7 +267,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { .expirationDate(expirationDate).build(); CookiesForCannedPolicy cookies = cloudFrontUtilities.getCookiesForCannedPolicy(request); @@ -91,7 +96,7 @@ index a446417b658..91cb54ea284 100644 HttpExecuteResponse response = client.prepareRequest(HttpExecuteRequest.builder() .request(cookies.createHttpGetRequest()) .build()).call(); -@@ -240,7 +240,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { +@@ -288,7 +287,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { .expirationDate(expirationDate) .activeDate(activeDate)); @@ -100,7 +105,7 @@ index a446417b658..91cb54ea284 100644 HttpExecuteResponse response = client.prepareRequest(HttpExecuteRequest.builder() .request(cookies.createHttpGetRequest()) .build()).call(); -@@ -263,7 +263,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { +@@ -311,7 +310,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { .activeDate(activeDate).build(); CookiesForCustomPolicy cookies = cloudFrontUtilities.getCookiesForCustomPolicy(request); @@ -109,7 +114,7 @@ index a446417b658..91cb54ea284 100644 HttpExecuteResponse response = client.prepareRequest(HttpExecuteRequest.builder() .request(cookies.createHttpGetRequest()) .build()).call(); -@@ -296,7 +296,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { +@@ -345,7 +344,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { URI modifiedUri = URI.create(urlWithDynamicParam); @@ -118,7 +123,7 @@ index a446417b658..91cb54ea284 100644 HttpExecuteResponse response = client.prepareRequest(HttpExecuteRequest.builder() .request(SdkHttpRequest.builder() .encodedPath(modifiedUri.getRawPath() + "?" + modifiedUri.getRawQuery()) -@@ -332,7 +332,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { +@@ -382,7 +381,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { URI modifiedUri = URI.create(signedUrl.url().replace("/specific-file","/other-file")); @@ -127,7 +132,7 @@ index a446417b658..91cb54ea284 100644 HttpExecuteResponse response = client.prepareRequest(HttpExecuteRequest.builder() .request(SdkHttpRequest.builder() .encodedPath(modifiedUri.getRawPath() + "?" + modifiedUri.getRawQuery()) -@@ -367,7 +367,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { +@@ -418,7 +417,7 @@ public class CloudFrontUtilitiesIntegrationTest extends IntegrationTestBase { URI modifiedUri = URI.create(signedUrl.url().replace("/s3ObjectKey","/foo/other-file")); @@ -167,95 +172,21 @@ index e933e6b4f30..758027150e3 100644 HttpExecuteRequest request = HttpExecuteRequest.builder() .request(signedRequest) -diff --git a/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/MediaStoreDataIntegrationTestBase.java b/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/MediaStoreDataIntegrationTestBase.java -index feafd9c18bf..dfe2bb201de 100644 ---- a/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/MediaStoreDataIntegrationTestBase.java -+++ b/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/MediaStoreDataIntegrationTestBase.java -@@ -37,8 +37,6 @@ import software.amazon.awssdk.core.interceptor.Context; - import software.amazon.awssdk.core.interceptor.ExecutionAttributes; - import software.amazon.awssdk.core.interceptor.ExecutionInterceptor; - import software.amazon.awssdk.http.ContentStreamProvider; --import software.amazon.awssdk.http.SdkHttpClient; --import software.amazon.awssdk.http.apache.ApacheHttpClient; - import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity; - import software.amazon.awssdk.identity.spi.IdentityProvider; - import software.amazon.awssdk.regions.Region; -@@ -61,15 +59,12 @@ public class MediaStoreDataIntegrationTestBase extends AwsIntegrationTestBase { - @BeforeAll - public static void init() { - credentialsProvider = getCredentialsProvider(); -- SdkHttpClient sdkHttpClient = ApacheHttpClient.builder().build(); - mediaStoreClient = MediaStoreClient.builder() - .credentialsProvider(credentialsProvider) -- .httpClient(sdkHttpClient) - .build(); - StsClient stsClient = StsClient.builder() - .credentialsProvider(CREDENTIALS_PROVIDER_CHAIN) - .region(Region.US_WEST_2) -- .httpClient(sdkHttpClient) - .build(); - String accountId = stsClient.getCallerIdentity().account(); - String containerName = "do-not-delete-mediastoredata-tests-container-" + accountId; -diff --git a/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/RequestCompressionStreamingIntegrationTest.java b/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/RequestCompressionStreamingIntegrationTest.java -index e20cddb44f6..34d45b96081 100644 ---- a/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/RequestCompressionStreamingIntegrationTest.java -+++ b/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/RequestCompressionStreamingIntegrationTest.java -@@ -35,7 +35,6 @@ import software.amazon.awssdk.core.internal.compression.Compressor; - import software.amazon.awssdk.core.internal.compression.GzipCompressor; - import software.amazon.awssdk.core.internal.interceptor.trait.RequestCompression; - import software.amazon.awssdk.core.sync.RequestBody; --import software.amazon.awssdk.http.apache.ApacheHttpClient; - import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient; - import software.amazon.awssdk.services.mediastoredata.model.DeleteObjectRequest; - import software.amazon.awssdk.services.mediastoredata.model.GetObjectRequest; -@@ -71,7 +70,6 @@ public class RequestCompressionStreamingIntegrationTest extends MediaStoreDataIn - syncClient = MediaStoreDataClient.builder() - .endpointOverride(uri) - .credentialsProvider(credentialsProvider) -- .httpClient(ApacheHttpClient.builder().build()) - .overrideConfiguration(o -> o.addExecutionInterceptor(new CaptureTransferEncodingHeaderInterceptor()) - .addExecutionInterceptor(new CaptureContentEncodingHeaderInterceptor()) - .putExecutionAttribute(SdkInternalExecutionAttribute.REQUEST_COMPRESSION, -diff --git a/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/TransferEncodingChunkedIntegrationTest.java b/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/TransferEncodingChunkedIntegrationTest.java -index 421a031a12b..f4f4322eb57 100644 ---- a/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/TransferEncodingChunkedIntegrationTest.java -+++ b/services/mediastoredata/src/it/java/software/amazon/awssdk/services/mediastoredata/TransferEncodingChunkedIntegrationTest.java -@@ -23,7 +23,7 @@ import org.junit.jupiter.api.AfterAll; - import org.junit.jupiter.api.BeforeAll; - import org.junit.jupiter.api.Test; - import software.amazon.awssdk.core.sync.RequestBody; --import software.amazon.awssdk.http.apache.ApacheHttpClient; -+import software.amazon.awssdk.http.apache5.Apache5HttpClient; - import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient; - import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; - import software.amazon.awssdk.services.mediastoredata.model.DeleteObjectRequest; -@@ -44,7 +44,7 @@ public class TransferEncodingChunkedIntegrationTest extends MediaStoreDataIntegr - syncClientWithApache = MediaStoreDataClient.builder() - .endpointOverride(uri) - .credentialsProvider(credentialsProvider) -- .httpClient(ApacheHttpClient.builder().build()) -+ .httpClient(Apache5HttpClient.builder().build()) - .overrideConfiguration(o -> o.addExecutionInterceptor(new CaptureTransferEncodingHeaderInterceptor())) - .build(); - diff --git a/services/pom.xml b/services/pom.xml -index 2f0fbb22fc3..23044600d67 100644 +index a9ace22ad66..5bf4f814d41 100644 --- a/services/pom.xml +++ b/services/pom.xml -@@ -522,9 +522,9 @@ +@@ -522,7 +522,7 @@ ${awsjavasdk.version} - apache-client + apache5-client software.amazon.awssdk -- ${awsjavasdk.version} -+ ${awsjavasdk.version}-PREVIEW + ${awsjavasdk.version} runtime - - diff --git a/services/s3/pom.xml b/services/s3/pom.xml -index 9d55ab2030a..e605ca89305 100644 +index c0f8e5b1f3a..8c38ce6b80b 100644 --- a/services/s3/pom.xml +++ b/services/s3/pom.xml @@ -197,6 +197,12 @@ diff --git a/services/dynamodb/src/test/resources/software/amazon/awssdk/services/dynamodb/security-manager-integ-test.policy b/services/dynamodb/src/test/resources/software/amazon/awssdk/services/dynamodb/security-manager-integ-test.policy index 3737c5650c87..1fc912e9962f 100644 --- a/services/dynamodb/src/test/resources/software/amazon/awssdk/services/dynamodb/security-manager-integ-test.policy +++ b/services/dynamodb/src/test/resources/software/amazon/awssdk/services/dynamodb/security-manager-integ-test.policy @@ -5,6 +5,7 @@ grant { permission "java.lang.RuntimePermission" "accessDeclaredMembers"; permission "javax.net.ssl.SSLPermission" "setDefaultSSLContext"; permission "java.net.SocketPermission" "*", "connect,resolve"; + permission "jdk.net.NetworkPermission" "*", "setOption."; // Needed for test to remove the security manager permission java.lang.RuntimePermission "setSecurityManager";