diff --git a/sdk/storage/storage-blob/recordings/node/appendblobclient_nodejs_only/recording_appendblock__append_large_block.js b/sdk/storage/storage-blob/recordings/node/appendblobclient_nodejs_only/recording_appendblock__append_large_block.js new file mode 100644 index 000000000000..019d6507252b --- /dev/null +++ b/sdk/storage/storage-blob/recordings/node/appendblobclient_nodejs_only/recording_appendblock__append_large_block.js @@ -0,0 +1,45 @@ +let nock = require('nock'); + +module.exports.hash = "8b3a805bcc5fcfdc4c6cf030745bb876"; + +module.exports.testInfo = {"uniqueName":{"container":"container168325374579008539","blob":"blob168325374720703652"},"newDate":{}} + +nock('https://fakestorageaccount.blob.core.windows.net:443', {"encodedQueryParams":true}) + .put('/container168325374579008539') + .query(true) + .reply(201, "", [ + 'Content-Length', + '0', + 'Last-Modified', + 'Fri, 05 May 2023 02:29:07 GMT', + 'ETag', + '"0x8DB4D1080700EDA"', + 'Server', + 'Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0', + 'x-ms-request-id', + '18d40362-b01e-0011-21f9-7e5005000000', + 'x-ms-client-request-id', + '2a0aeed1-5120-4b1d-aaa1-662ff35026df', + 'x-ms-version', + '2023-01-03', + 'Date', + 'Fri, 05 May 2023 02:29:06 GMT' +]); + +nock('https://fakestorageaccount.blob.core.windows.net:443', {"encodedQueryParams":true}) + .delete('/container168325374579008539') + .query(true) + .reply(202, "", [ + 'Content-Length', + '0', + 'Server', + 'Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0', + 'x-ms-request-id', + '18d40591-b01e-0011-25f9-7e5005000000', + 'x-ms-client-request-id', + 'a7945692-5078-49f2-aee6-f89f6fcc6bd2', + 'x-ms-version', + '2023-01-03', + 'Date', + 'Fri, 05 May 2023 02:29:06 GMT' +]); diff --git a/sdk/storage/storage-blob/test/node/appendblobclient.spec.ts b/sdk/storage/storage-blob/test/node/appendblobclient.spec.ts index 775c6be1dd33..1383d32c24ed 100644 --- a/sdk/storage/storage-blob/test/node/appendblobclient.spec.ts +++ b/sdk/storage/storage-blob/test/node/appendblobclient.spec.ts @@ -35,6 +35,8 @@ describe("AppendBlobClient Node.js only", () => { let recorder: Recorder; let blobServiceClient: BlobServiceClient; + const timeoutForLargeFileUploadingTest = 20 * 60 * 1000; + beforeEach(async function (this: Context) { recorder = record(this, recorderEnvSetup); blobServiceClient = getBSU(); @@ -323,4 +325,20 @@ describe("AppendBlobClient Node.js only", () => { assert.equal(await bodyToString(downloadResponse, content.length * 2), content + content); assert.equal(downloadResponse.contentLength!, content.length * 2); }); + + it("appendBlock - append large block", async () => { + recorder.skip("node", "Recorder file larger than github limitation"); + await appendBlobClient.create(); + + const largeBlockSize = 100 * 1024 * 1024; + const content = new Uint8Array(largeBlockSize); + for (let i = 0; i < largeBlockSize; i = i + 1000) { + content[i] = i; + } + await appendBlobClient.appendBlock(content, content.length); + + const downloadResponse = await appendBlobClient.downloadToBuffer(0); + assert.deepStrictEqual(downloadResponse, content); + assert.equal(downloadResponse.length, content.length); + }).timeout(timeoutForLargeFileUploadingTest); });