From 9428fac4e42671afc29c845c69900aae349eb7b2 Mon Sep 17 00:00:00 2001 From: Cristopher Pinzon Date: Fri, 11 Mar 2022 17:19:10 -0500 Subject: [PATCH] test of s3 objects deletion --- .../localstack/awssdkv1/S3FeaturesTest.java | 38 ++++++++++++++++ .../awssdkv2/BasicFeaturesSDKV2Test.java | 44 +++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/src/test/java/cloud/localstack/awssdkv1/S3FeaturesTest.java b/src/test/java/cloud/localstack/awssdkv1/S3FeaturesTest.java index 5a842a0..e12e430 100644 --- a/src/test/java/cloud/localstack/awssdkv1/S3FeaturesTest.java +++ b/src/test/java/cloud/localstack/awssdkv1/S3FeaturesTest.java @@ -2,6 +2,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; import cloud.localstack.*; import cloud.localstack.docker.annotation.LocalstackDockerProperties; @@ -25,6 +26,7 @@ import com.amazonaws.HttpMethod; import com.amazonaws.client.builder.AwsClientBuilder; +import com.amazonaws.services.mediastoredata.model.DeleteObjectResult; import com.amazonaws.services.s3.*; import com.amazonaws.services.s3.model.*; import com.amazonaws.services.s3.model.lifecycle.*; @@ -122,6 +124,42 @@ public void testMetadata() { Assert.assertEquals(originalMetadata, receivedMetadata); } + /** + * Test S3 objects deletion + */ + @Test + public void testObjectDeletion() { + AmazonS3 s3 = TestUtils.getClientS3(); + String bucketName = UUID.randomUUID().toString(); + s3.createBucket(bucketName); + + Map originalMetadata = new HashMap(); + originalMetadata.put("key1", "val1"); + originalMetadata.put("key_2", "val2"); + originalMetadata.put("__key3", "val3"); + + ObjectMetadata objectMetadata = new ObjectMetadata(); + objectMetadata.setUserMetadata(originalMetadata); + + String keyName = "my-key-1"; + InputStream is = new ByteArrayInputStream("test-string".getBytes(StandardCharsets.UTF_8)); + s3.putObject(new PutObjectRequest(bucketName, keyName, is, objectMetadata)); + s3.deleteObject(new DeleteObjectRequest(bucketName, keyName)); + + AmazonS3Exception exception = assertThrows(AmazonS3Exception.class, () -> { + s3.getObject(new GetObjectRequest(bucketName, keyName)); + }); + Assert.assertEquals(exception.getErrorCode(), "NoSuchKey"); + + s3.putObject(new PutObjectRequest(bucketName, keyName, is, objectMetadata)); + s3.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keyName)); + + AmazonS3Exception exception2 = assertThrows(AmazonS3Exception.class, () -> { + s3.getObject(new GetObjectRequest(bucketName, keyName)); + }); + Assert.assertEquals(exception2.getErrorCode(), "NoSuchKey"); + } + @Test public void testListNextBatchOfObjects() { AmazonS3 s3Client = TestUtils.getClientS3(); diff --git a/src/test/java/cloud/localstack/awssdkv2/BasicFeaturesSDKV2Test.java b/src/test/java/cloud/localstack/awssdkv2/BasicFeaturesSDKV2Test.java index 570ebe1..f4316d5 100644 --- a/src/test/java/cloud/localstack/awssdkv2/BasicFeaturesSDKV2Test.java +++ b/src/test/java/cloud/localstack/awssdkv2/BasicFeaturesSDKV2Test.java @@ -19,6 +19,8 @@ import org.testcontainers.utility.ThrowingFunction; import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.core.SdkSystemSetting; +import software.amazon.awssdk.core.async.AsyncRequestBody; +import software.amazon.awssdk.core.async.AsyncResponseTransformer; import software.amazon.awssdk.services.cloudwatch.CloudWatchAsyncClient; import software.amazon.awssdk.services.cloudwatch.CloudWatchClient; import software.amazon.awssdk.services.cloudwatch.model.Dimension; @@ -55,8 +57,12 @@ import software.amazon.awssdk.services.s3.model.Bucket; import software.amazon.awssdk.services.s3.model.CreateBucketRequest; import software.amazon.awssdk.services.s3.model.CreateBucketResponse; +import software.amazon.awssdk.services.s3.model.DeleteObjectRequest; +import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.ListBucketsRequest; import software.amazon.awssdk.services.s3.model.ListBucketsResponse; +import software.amazon.awssdk.services.s3.model.PutObjectRequest; +import software.amazon.awssdk.services.s3.model.S3Exception; import software.amazon.awssdk.services.secretsmanager.SecretsManagerAsyncClient; import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient; import software.amazon.awssdk.services.secretsmanager.model.CreateSecretRequest; @@ -82,14 +88,20 @@ import software.amazon.awssdk.services.ssm.model.PutParameterRequest; import software.amazon.awssdk.services.ssm.model.PutParameterResponse; +import static org.junit.Assert.assertThrows; + import java.nio.ByteBuffer; import java.time.Instant; import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.UUID; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -620,4 +632,36 @@ public void testIAMListUserPaginationAsync() throws Exception { Assert.assertTrue(userFound.get()); } + @Test + public void testS3ObjectDeletion() { + S3AsyncClient s3 = TestUtils.getClientS3AsyncV2(); + + String bucketName = UUID.randomUUID().toString(); + CreateBucketRequest createBucketRequest = CreateBucketRequest.builder().bucket(bucketName).build(); + s3.createBucket(createBucketRequest).join(); + + String keyName = "my-key-1"; + PutObjectRequest objectRequest = PutObjectRequest.builder().bucket(bucketName).key(keyName).build(); + AsyncRequestBody requestBody = AsyncRequestBody.fromBytes("data".getBytes()); + s3.putObject(objectRequest, requestBody).join(); + + DeleteObjectRequest deleteObjectRequest = DeleteObjectRequest.builder().bucket(bucketName).key(keyName).build(); + s3.deleteObject(deleteObjectRequest).join(); + + GetObjectRequest getObjectRequest = GetObjectRequest.builder().bucket(bucketName).key(keyName).build(); + + CompletionException exception = assertThrows(CompletionException.class, () -> { + s3.getObject(getObjectRequest, AsyncResponseTransformer.toBytes()).join(); + }); + Assert.assertTrue(exception.getCause().getMessage().contains("The specified key does not exist.")); + + s3.putObject(objectRequest, requestBody).join(); + s3.deleteObject(deleteObjectRequest).join(); + + CompletionException exception2 = assertThrows(CompletionException.class, () -> { + s3.getObject(getObjectRequest, AsyncResponseTransformer.toBytes()).join(); + }); + Assert.assertTrue(exception2.getCause().getMessage().contains("The specified key does not exist.")); + } + }