From c53bf6c091937fd78a30f098f11ea52e3fb760ed Mon Sep 17 00:00:00 2001 From: "Kamat, Trivikram" <16024985+trivikr@users.noreply.github.com> Date: Wed, 8 May 2024 16:36:55 +0000 Subject: [PATCH 1/3] test(middleware-sdk-s3): only delete the s3-express bucket created by the test --- .../middleware-s3-express.e2e.spec.ts | 107 ++++++------------ 1 file changed, 34 insertions(+), 73 deletions(-) diff --git a/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts b/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts index e069cf9aaa8a..860d31213e32 100644 --- a/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts +++ b/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts @@ -37,18 +37,11 @@ describe("s3 express CRUD test suite", () => { beforeAll(async () => { ({ s3, controller, bucketName, recorder } = await createClientAndRecorder()); - await deleteBuckets(controller); await s3.createBucket({ Bucket: bucketName, CreateBucketConfiguration: { - Location: { - Type: "AvailabilityZone", - Name: zone, - }, - Bucket: { - Type: "Directory", - DataRedundancy: "SingleAvailabilityZone", - }, + Location: { Type: "AvailabilityZone", Name: zone }, + Bucket: { Type: "Directory", DataRedundancy: "SingleAvailabilityZone" }, }, }); @@ -99,34 +92,22 @@ describe("s3 express CRUD test suite", () => { }); afterAll(async () => { - await deleteBuckets(controller); + await deleteBuckets(controller, bucketName); }); it("can create a bucket", () => { expect(createRecorder).toEqual({ - "CreateBucketCommand (normal)": { - [bucketName]: 1, - }, - "HeadBucketCommand (s3 express)": { - [bucketName]: 1, - }, - "CreateSessionCommand (normal)": { - [bucketName]: 1, - }, + "CreateBucketCommand (normal)": { [bucketName]: 1 }, + "HeadBucketCommand (s3 express)": { [bucketName]: 1 }, + "CreateSessionCommand (normal)": { [bucketName]: 1 }, }); }); it("can read/write/delete from a bucket", () => { expect(readWriteDeleteRecorder).toEqual({ - "PutObjectCommand (s3 express)": { - [bucketName]: SCALE, - }, - "GetObjectCommand (s3 express)": { - [bucketName]: SCALE, - }, - "DeleteObjectCommand (s3 express)": { - [bucketName]: SCALE, - }, + "PutObjectCommand (s3 express)": { [bucketName]: SCALE }, + "GetObjectCommand (s3 express)": { [bucketName]: SCALE }, + "DeleteObjectCommand (s3 express)": { [bucketName]: SCALE }, }); }); @@ -209,9 +190,7 @@ describe("s3 express CRUD test suite", () => { }); async function createClientAndRecorder() { - const sts = new STS({ - region, - }); + const sts = new STS({ region }); const accountId = (await sts.getCallerIdentity({})).Account; const bucketName = `${accountId}-js-test-bucket-${(Date.now() / 1000) | 0}--${suffix}`; @@ -261,52 +240,34 @@ async function createClientAndRecorder() { }; } -async function deleteBuckets(s3: S3) { - const buckets = await s3.listDirectoryBuckets({}); - - for (const bucket of buckets.Buckets ?? []) { - const Bucket = bucket.Name; +async function deleteBuckets(s3: S3, bucketName: string) { + const Bucket = bucketName; + try { + await s3.headBucket({ Bucket }); + } catch (e) { + return; + } - try { - await s3.headBucket({ - Bucket, - }); - } catch (e) { - return; + const list = await s3.listObjectsV2({ Bucket }).catch((e) => { + if (!String(e).includes("NoSuchBucket")) { + throw e; } + return { + Contents: [], + }; + }); - const list = await s3 - .listObjectsV2({ - Bucket, - }) - .catch((e) => { - if (!String(e).includes("NoSuchBucket")) { - throw e; - } - return { - Contents: [], - }; - }); - - const promises = [] as Promise[]; - for (const key of list.Contents ?? []) { - promises.push( - s3.deleteObject({ - Bucket, - Key: key.Key, - }) - ); - } - await Promise.all(promises); + const promises = [] as Promise[]; + for (const key of list.Contents ?? []) { + promises.push(s3.deleteObject({ Bucket, Key: key.Key })); + } + await Promise.all(promises); - try { - return await s3.deleteBucket({ - Bucket, - }); - } catch (e) { - if (!String(e).includes("NoSuchBucket")) { - throw e; - } + try { + return await s3.deleteBucket({ Bucket }); + } catch (e) { + if (!String(e).includes("NoSuchBucket")) { + throw e; } } } From 8a8e13431764b81a64476a57ae101af87d92b8fc Mon Sep 17 00:00:00 2001 From: "Kamat, Trivikram" <16024985+trivikr@users.noreply.github.com> Date: Wed, 8 May 2024 16:43:05 +0000 Subject: [PATCH 2/3] fix(middleware-sdk-s3): use random string in the bucket name --- .../src/s3-express/middleware-s3-express.e2e.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts b/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts index 860d31213e32..dffea397fc01 100644 --- a/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts +++ b/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts @@ -193,7 +193,7 @@ async function createClientAndRecorder() { const sts = new STS({ region }); const accountId = (await sts.getCallerIdentity({})).Account; - const bucketName = `${accountId}-js-test-bucket-${(Date.now() / 1000) | 0}--${suffix}`; + const bucketName = `${accountId}-js-test-bucket-${(Math.random() + 1).toString(36).substring(2)}--${suffix}`; const s3 = new S3({ region, From 99d92a26f3f36db1396f4253c30d07935d4ac92d Mon Sep 17 00:00:00 2001 From: "Kamat, Trivikram" <16024985+trivikr@users.noreply.github.com> Date: Wed, 8 May 2024 16:47:49 +0000 Subject: [PATCH 3/3] chore: rename deleteBuckets to emptyAndDeleteBucket --- .../src/s3-express/middleware-s3-express.e2e.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts b/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts index dffea397fc01..24fb6032d268 100644 --- a/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts +++ b/packages/middleware-sdk-s3/src/s3-express/middleware-s3-express.e2e.spec.ts @@ -92,7 +92,7 @@ describe("s3 express CRUD test suite", () => { }); afterAll(async () => { - await deleteBuckets(controller, bucketName); + await emptyAndDeleteBucket(controller, bucketName); }); it("can create a bucket", () => { @@ -240,7 +240,7 @@ async function createClientAndRecorder() { }; } -async function deleteBuckets(s3: S3, bucketName: string) { +async function emptyAndDeleteBucket(s3: S3, bucketName: string) { const Bucket = bucketName; try { await s3.headBucket({ Bucket });