From 12592f4e29a7494a8409a1486765917531dc83ed Mon Sep 17 00:00:00 2001 From: Shubhendu Ram Tripathi Date: Mon, 6 May 2024 15:24:04 +0530 Subject: [PATCH] Added test for AWS CRT based client Signed-off-by: Shubhendu Ram Tripathi --- build/aws-sdk-java-v2/app/build.gradle.kts | 1 + .../awssdk/v2/tests/FunctionalTests.java | 68 ++++++++++++++++++- .../io/minio/awssdk/v2/tests/S3TestUtils.java | 8 ++- 3 files changed, 73 insertions(+), 4 deletions(-) diff --git a/build/aws-sdk-java-v2/app/build.gradle.kts b/build/aws-sdk-java-v2/app/build.gradle.kts index afc6f52..cd55d68 100644 --- a/build/aws-sdk-java-v2/app/build.gradle.kts +++ b/build/aws-sdk-java-v2/app/build.gradle.kts @@ -22,6 +22,7 @@ dependencies { implementation(platform("software.amazon.awssdk:bom:2.25.31")) implementation("software.amazon.awssdk:s3") implementation("software.amazon.awssdk:netty-nio-client") + implementation("software.amazon.awssdk:aws-crt-client") // jackson dependency implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.13.+") diff --git a/build/aws-sdk-java-v2/app/src/main/java/io/minio/awssdk/v2/tests/FunctionalTests.java b/build/aws-sdk-java-v2/app/src/main/java/io/minio/awssdk/v2/tests/FunctionalTests.java index 2fbeeab..3efcb78 100644 --- a/build/aws-sdk-java-v2/app/src/main/java/io/minio/awssdk/v2/tests/FunctionalTests.java +++ b/build/aws-sdk-java-v2/app/src/main/java/io/minio/awssdk/v2/tests/FunctionalTests.java @@ -18,8 +18,10 @@ package io.minio.awssdk.v2.tests; import software.amazon.awssdk.auth.credentials.*; +import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.internal.http.loader.DefaultSdkHttpClientBuilder; import software.amazon.awssdk.core.waiters.WaiterResponse; +import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.SdkHttpConfigurationOption; import software.amazon.awssdk.http.async.SdkAsyncHttpClient; @@ -34,6 +36,7 @@ import java.io.IOException; import java.math.BigInteger; import java.net.URI; +import java.nio.file.Path; import java.nio.file.Paths; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; @@ -62,6 +65,7 @@ public class FunctionalTests { private static S3Client s3Client; private static S3AsyncClient s3AsyncClient; + private static S3AsyncClient s3CrtAsyncClient; private static S3TestUtils s3TestUtils; public static String getRandomName() { @@ -118,6 +122,7 @@ public static void runTests() throws Exception { uploadMultiPart_test(); uploadMultiPartAsync_test(); uploadObjectVersions_test(); + crtClientDownload_test(); // uploadSnowballObjects_test(); } @@ -321,6 +326,45 @@ public static void uploadObjectVersions_test() throws Exception { } } + public static void crtClientDownload_test() throws Exception { + if (!mintEnv) { + System.out.println("Test: Async S3CrtClient.getObject"); + } + if (!enableHTTPS) { + return; + } + + String bucket = getRandomName(); + long startTime = System.currentTimeMillis(); + String objectName = "testobject"; + try { + s3Client.createBucket(CreateBucketRequest + .builder() + .bucket(bucket) + .build()); + s3Client.waiter().waitUntilBucketExists(HeadBucketRequest + .builder() + .bucket(bucket) + .build()); + s3CrtAsyncClient.putObject( + r -> r.bucket(bucket).key(objectName), AsyncRequestBody.empty() + ).join(); + s3CrtAsyncClient.getObject( + r -> r.bucket(bucket).key(objectName), Path.of("/tmp/test") + ).join(); + mintSuccessLog("Async S3CrtClient.getObject versions", + "bucket: " + bucket + ", object: " + objectName, + startTime); + } catch (Exception ex) { + mintFailedLog("Async S3CrtClient.getObject", + "bucket: " + bucket + ", object: " + objectName, + startTime, + null, + ex.toString() + " >>> " + Arrays.toString(ex.getStackTrace())); + throw ex; + } + } + public static void teardown() throws IOException { ListBucketsResponse response = s3Client.listBuckets(ListBucketsRequest .builder() @@ -406,6 +450,20 @@ public static void main(String[] args) throws Exception, IOException, NoSuchAlgo .region(region) .httpClient(sdkAsyncHttpClient) .build(); + SdkAsyncHttpClient crtAsyncHttpClient = AwsCrtAsyncHttpClient + .builder() + .buildWithDefaults(AttributeMap + .builder() + .put(SdkHttpConfigurationOption.TRUST_ALL_CERTIFICATES, true) + .build()); + s3CrtAsyncClient = S3AsyncClient + .builder() + .endpointOverride(URI.create(endpoint)) + .forcePathStyle(true) + .credentialsProvider(StaticCredentialsProvider.create(credentials)) + .region(region) + .httpClient(crtAsyncHttpClient) + .build(); } else { s3Client = S3Client .builder() @@ -425,9 +483,17 @@ public static void main(String[] args) throws Exception, IOException, NoSuchAlgo .credentialsProvider(StaticCredentialsProvider.create(credentials)) .region(region) .build(); + s3CrtAsyncClient = S3AsyncClient + .crtBuilder() + .checksumValidationEnabled(false) + .endpointOverride(URI.create(endpoint)) + .forcePathStyle(true) + .credentialsProvider(StaticCredentialsProvider.create(credentials)) + .region(region) + .build(); } - s3TestUtils = new S3TestUtils(s3Client, s3AsyncClient); + s3TestUtils = new S3TestUtils(s3Client, s3AsyncClient, s3CrtAsyncClient); try { initTests(); diff --git a/build/aws-sdk-java-v2/app/src/main/java/io/minio/awssdk/v2/tests/S3TestUtils.java b/build/aws-sdk-java-v2/app/src/main/java/io/minio/awssdk/v2/tests/S3TestUtils.java index b3368b7..bd8fb54 100644 --- a/build/aws-sdk-java-v2/app/src/main/java/io/minio/awssdk/v2/tests/S3TestUtils.java +++ b/build/aws-sdk-java-v2/app/src/main/java/io/minio/awssdk/v2/tests/S3TestUtils.java @@ -36,10 +36,12 @@ public class S3TestUtils { private final S3Client s3Client; private final S3AsyncClient s3AsyncClient; + private final S3AsyncClient s3CrtAsyncClient; - S3TestUtils(S3Client s3Client, S3AsyncClient s3AsyncClient) { - this.s3Client = s3Client; - this.s3AsyncClient = s3AsyncClient; + S3TestUtils(S3Client s3Client, S3AsyncClient s3AsyncClient, S3AsyncClient s3CrtAsyncClient) { + this.s3Client = s3Client; + this.s3AsyncClient = s3AsyncClient; + this.s3CrtAsyncClient = s3CrtAsyncClient; } void uploadMultipartObject(String bucketName, String keyName) throws IOException {