From ade1aaf4aacc5f9a405bce1e2424f837e92999b6 Mon Sep 17 00:00:00 2001 From: Wei Wang Date: Mon, 5 Dec 2022 12:34:29 -0500 Subject: [PATCH] Clone of python-admin-sdk-support --- .../conformance/gcs.endpoints.test.ts | 35 +++++++++++++++++++ src/emulator/storage/apis/gcloud.ts | 33 +++++++++-------- 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/scripts/storage-emulator-integration/conformance/gcs.endpoints.test.ts b/scripts/storage-emulator-integration/conformance/gcs.endpoints.test.ts index 11e57fd3d16..c9c5a248e58 100644 --- a/scripts/storage-emulator-integration/conformance/gcs.endpoints.test.ts +++ b/scripts/storage-emulator-integration/conformance/gcs.endpoints.test.ts @@ -428,4 +428,39 @@ describe("GCS endpoint conformance tests", () => { }); }); }); + + describe("Delete protocols", () => { + describe("delete objects", () => { + it("should delete objects in the provided bucket", async () => { + const pathPatterns = [ + `/b/${storageBucket}/o/${TEST_FILE_NAME}`, + `/storage/v1/b/${storageBucket}/o/${TEST_FILE_NAME}`, + ]; + + for (const deletePathPattern of pathPatterns) { + await supertest(storageHost) + .post(`/upload/storage/v1/b/${storageBucket}/o?name=${TEST_FILE_NAME}`) + .set(authHeader) + .send(Buffer.from("hello world")) + .expect(200); + + let data = await supertest(storageHost) + .get(`/storage/v1/b/${storageBucket}/o`) + .set(authHeader) + .expect(200) + .then((res) => res.body); + expect(data.items.length).to.equal(1); + + await supertest(storageHost).delete(deletePathPattern).set(authHeader).expect(204); + + data = await supertest(storageHost) + .get(`/storage/v1/b/${storageBucket}/o`) + .set(authHeader) + .expect(200) + .then((res) => res.body); + expect(data.items.length).to.equal(0); + } + }); + }); + }); }); diff --git a/src/emulator/storage/apis/gcloud.ts b/src/emulator/storage/apis/gcloud.ts index a51070e35b2..1424b0dc562 100644 --- a/src/emulator/storage/apis/gcloud.ts +++ b/src/emulator/storage/apis/gcloud.ts @@ -160,23 +160,26 @@ export function createCloudEndpoints(emulator: StorageEmulator): Router { }); }); - gcloudStorageAPI.delete("/b/:bucketId/o/:objectId", async (req, res) => { - try { - await adminStorageLayer.deleteObject({ - bucketId: req.params.bucketId, - decodedObjectId: req.params.objectId, - }); - } catch (err) { - if (err instanceof NotFoundError) { - return sendObjectNotFound(req, res); - } - if (err instanceof ForbiddenError) { - return res.sendStatus(403); + gcloudStorageAPI.delete( + ["/b/:bucketId/o/:objectId", "/storage/v1/b/:bucketId/o/:objectId"], + async (req, res) => { + try { + await adminStorageLayer.deleteObject({ + bucketId: req.params.bucketId, + decodedObjectId: req.params.objectId, + }); + } catch (err) { + if (err instanceof NotFoundError) { + return sendObjectNotFound(req, res); + } + if (err instanceof ForbiddenError) { + return res.sendStatus(403); + } + throw err; } - throw err; + return res.sendStatus(204); } - return res.sendStatus(204); - }); + ); gcloudStorageAPI.put("/upload/storage/v1/b/:bucketId/o", async (req, res) => { if (!req.query.upload_id) {