From 78a07e2e070d64d63c55c39e9ba5d0f9b1f3a232 Mon Sep 17 00:00:00 2001 From: BrendonK Date: Wed, 11 Dec 2024 09:05:35 +0200 Subject: [PATCH] =?UTF-8?q?Added=20accessTier=20check=20to=20download=20ca?= =?UTF-8?q?ll=20for=20BlobHandler.ts=20to=20fail=20on=E2=80=A6=20(#2483)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added accessTier check to download call for BlobHandler.ts to fail on archived blobs. #2473 * Updated sas.test.ts test to handle new error.detail.code for Archived blob failure. #2473 * Update sas.test.ts to fix sql failure * Update blob.test.ts --------- Co-authored-by: BrendonKleinhans Co-authored-by: Wei Wei --- ChangeLog.md | 4 ++++ src/blob/handlers/BlobHandler.ts | 4 ++++ tests/blob/apis/blob.test.ts | 16 ++++++++++++++++ tests/blob/sas.test.ts | 4 ++-- 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 2d45ef3d9..d043ce63c 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -4,6 +4,10 @@ ## Upcoming Release +Blob: + +- GetBlob on Archive tier blobs now fails as expected. + ## 2024.10 Version 3.33.0 General: diff --git a/src/blob/handlers/BlobHandler.ts b/src/blob/handlers/BlobHandler.ts index ef3625cee..9d5f9f4df 100644 --- a/src/blob/handlers/BlobHandler.ts +++ b/src/blob/handlers/BlobHandler.ts @@ -80,6 +80,10 @@ export default class BlobHandler extends BaseHandler implements IBlobHandler { options.modifiedAccessConditions ); + if (blob.properties.accessTier === Models.AccessTier.Archive) { + throw StorageErrorFactory.getBlobArchived(context.contextId!); + } + if (blob.properties.blobType === Models.BlobType.BlockBlob) { return this.downloadBlockBlobOrAppendBlob(options, context, blob); } else if (blob.properties.blobType === Models.BlobType.PageBlob) { diff --git a/tests/blob/apis/blob.test.ts b/tests/blob/apis/blob.test.ts index 6b33cedf4..f7a7847fa 100644 --- a/tests/blob/apis/blob.test.ts +++ b/tests/blob/apis/blob.test.ts @@ -253,6 +253,22 @@ describe("BlobAPIs", () => { assert.fail(); }); + it("download should not work when blob in Archive tier @loki @sql", async () => { + try { + + const result = await blobClient.setAccessTier("Archive"); + assert.equal( + result._response.request.headers.get("x-ms-client-request-id"), + result.clientRequestId + ); + await blobClient.download(0); + } catch (error) { + assert.deepStrictEqual(error.statusCode, 409); + return; + } + assert.fail(); + }); + it("download should not work with conditional header ifUnmodifiedSince @loki @sql", async () => { try { await blobClient.download(0, undefined, { diff --git a/tests/blob/sas.test.ts b/tests/blob/sas.test.ts index 956f10f2d..49a30df88 100644 --- a/tests/blob/sas.test.ts +++ b/tests/blob/sas.test.ts @@ -2110,7 +2110,7 @@ describe("Shared Access Signature (SAS) authentication", () => { const sourceBlob = sourceContainerClient.getBlockBlobClient(blobName); await sourceBlob.upload("hello", 5); - sourceBlob.setAccessTier("Archive"); + await sourceBlob.setAccessTier("Archive"); const targetBlob = targetContainerClient.getBlockBlobClient(blobName); @@ -2122,7 +2122,7 @@ describe("Shared Access Signature (SAS) authentication", () => { } assert.ok(error !== undefined); assert.equal(error.statusCode, 409); - assert.equal(error.details.code, "BlobArchived"); + assert.equal(error.details.code, "CannotVerifyCopySource"); }); it("Sync Copy blob across accounts should work and honor metadata when provided @loki", async () => {