From 85987577661010cbb16fba93d5beb9eb2cab68d0 Mon Sep 17 00:00:00 2001 From: Rick Ley Date: Fri, 23 Jul 2021 13:52:05 -0700 Subject: [PATCH 1/5] nothing --- .../azure/storage/common/test/shared/TestEnvironment.java | 6 +++--- .../java/com/azure/storage/file/share/FileAPITests.groovy | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sdk/storage/azure-storage-common/src/test-shared/java/com/azure/storage/common/test/shared/TestEnvironment.java b/sdk/storage/azure-storage-common/src/test-shared/java/com/azure/storage/common/test/shared/TestEnvironment.java index 6a674e2daee6..cad7066465ba 100644 --- a/sdk/storage/azure-storage-common/src/test-shared/java/com/azure/storage/common/test/shared/TestEnvironment.java +++ b/sdk/storage/azure-storage-common/src/test-shared/java/com/azure/storage/common/test/shared/TestEnvironment.java @@ -79,18 +79,18 @@ private String readServiceVersionFromEnvironment() { private static TestAccount readTestAccountFromEnvironment(String prefix, TestMode testMode) { String name = "azstoragesdkaccount"; String key = "astorageaccountkey"; - String connectionString = "DefaultEndpointsProtocol=https;AccountName=teststorage;" + String connectionString = "DefaultEndpointsProtocol=http;AccountName=teststorage;" + "AccountKey=atestaccountkey;EndpointSuffix=core.windows.net"; if (testMode != TestMode.PLAYBACK) { name = Configuration.getGlobalConfiguration().get(prefix + "ACCOUNT_NAME"); key = Configuration.getGlobalConfiguration().get(prefix + "ACCOUNT_KEY"); connectionString = Configuration.getGlobalConfiguration().get(prefix + "CONNECTION_STRING"); if (connectionString == null || connectionString.trim().isEmpty()) { - connectionString = String.format("DefaultEndpointsProtocol=https;AccountName=%s;" + connectionString = String.format("DefaultEndpointsProtocol=http;AccountName=%s;" + "AccountKey=%s;EndpointSuffix=core.windows.net", name, key); } } - String blobEndpoint = String.format("https://%s.blob.core.windows.net", name); + String blobEndpoint = String.format("http://%s.blob.core.windows.net", name); String blobEndpointSecondary = String.format("https://%s-secondary.blob.core.windows.net", name); String dataLakeEndpoint = String.format("https://%s.dfs.core.windows.net", name); String queueEndpoint = String.format("https://%s.queue.core.windows.net", name); diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy index 29736378dda9..6f71ff872682 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy @@ -425,7 +425,7 @@ class FileAPITests extends APISpec { def "Download empty file"() { setup: - primaryFileClient.create(1) + primaryFileClient.create(0) when: def outStream = new ByteArrayOutputStream() From b2c4c70c6050731d5995946bf1975fc59ba39498 Mon Sep 17 00:00:00 2001 From: Rick Ley Date: Fri, 23 Jul 2021 15:44:47 -0700 Subject: [PATCH 2/5] Fixed a bug that caused failure to download a zero length file --- .../file/share/ShareFileAsyncClient.java | 2 +- .../storage/file/share/FileAPITests.groovy | 15 +++- .../FileAPITestsDownloadEmptyFile[0].json | 88 ++++++++++++++++++ .../FileAPITestsDownloadEmptyFile[1].json | 89 +++++++++++++++++++ 4 files changed, 190 insertions(+), 4 deletions(-) create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[0].json create mode 100644 sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[1].json diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/ShareFileAsyncClient.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/ShareFileAsyncClient.java index 6758c15fa52a..8043e7b83087 100644 --- a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/ShareFileAsyncClient.java +++ b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/ShareFileAsyncClient.java @@ -934,7 +934,7 @@ Mono downloadWithResponse(ShareFileDownloadOptio private Mono downloadRange(ShareFileRange range, Boolean rangeGetContentMD5, ShareRequestConditions requestConditions, Context context) { - String rangeString = range == null ? null : range.toString(); + String rangeString = range == null ? null : range.toHeaderValue(); return azureFileStorageClient.getFiles().downloadWithResponseAsync(shareName, filePath, null, rangeString, rangeGetContentMD5, requestConditions.getLeaseId(), context); } diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy index 6f71ff872682..187b6e98eb6d 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy @@ -423,9 +423,10 @@ class FileAPITests extends APISpec { headers.getContentLanguage() == null } + @Unroll def "Download empty file"() { setup: - primaryFileClient.create(0) + primaryFileClient.create(fileSize) when: def outStream = new ByteArrayOutputStream() @@ -434,8 +435,16 @@ class FileAPITests extends APISpec { then: notThrown(ShareStorageException) - result.length == 1 - !result[0] + result.length == fileSize + if (fileSize > 0) { + assert !result[0] + } + + + where: + fileSize | _ + 0 | _ + 1 | _ } /* diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[0].json b/sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[0].json new file mode 100644 index 000000000000..46ea9c0d7ce5 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[0].json @@ -0,0 +1,88 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "http://REDACTED.file.core.windows.net/9d333c709d333c70fba94600fd73eec9fb234ee0a6?restype=share", + "Headers" : { + "x-ms-version" : "2020-10-02", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.11.0-beta.1 (11.0.7; Windows 10; 10.0)", + "x-ms-client-request-id" : "531d5496-b049-4f98-83a8-efb1446c394a" + }, + "Response" : { + "content-length" : "0", + "x-ms-version" : "2020-10-02", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "eTag" : "0x8D94E2B56247CF4", + "Last-Modified" : "Fri, 23 Jul 2021 22:43:48 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "eb6801dd-101a-0028-5a14-80bb6a000000", + "x-ms-client-request-id" : "531d5496-b049-4f98-83a8-efb1446c394a", + "Date" : "Fri, 23 Jul 2021 22:43:48 GMT" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "http://REDACTED.file.core.windows.net/9d333c709d333c70fba94600fd73eec9fb234ee0a6/9d333c709d333c70fba40108939f74771690471384", + "Headers" : { + "x-ms-version" : "2020-10-02", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.11.0-beta.1 (11.0.7; Windows 10; 10.0)", + "x-ms-client-request-id" : "a3cc3709-8ce2-4344-9bb4-b63bed655175" + }, + "Response" : { + "content-length" : "0", + "x-ms-version" : "2020-10-02", + "x-ms-file-permission-key" : "8870206874218656067*15256408171089631693", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2021-07-23T22:43:49.0303180Z", + "Last-Modified" : "Fri, 23 Jul 2021 22:43:49 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Jul 2021 22:43:48 GMT", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2021-07-23T22:43:49.0303180Z", + "x-ms-file-parent-id" : "0", + "eTag" : "0x8D94E2B566EE0CC", + "x-ms-request-id" : "053a3180-101a-0007-0d14-80b6a1000000", + "x-ms-client-request-id" : "a3cc3709-8ce2-4344-9bb4-b63bed655175", + "x-ms-file-last-write-time" : "2021-07-23T22:43:49.0303180Z" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "http://REDACTED.file.core.windows.net/9d333c709d333c70fba94600fd73eec9fb234ee0a6/9d333c709d333c70fba40108939f74771690471384", + "Headers" : { + "x-ms-version" : "2020-10-02", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.11.0-beta.1 (11.0.7; Windows 10; 10.0)", + "x-ms-client-request-id" : "01739042-a73a-4650-a9ed-80b3572db494" + }, + "Response" : { + "content-length" : "0", + "x-ms-version" : "2020-10-02", + "x-ms-lease-status" : "unlocked", + "x-ms-file-permission-key" : "8870206874218656067*15256408171089631693", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2021-07-23T22:43:49.0303180Z", + "x-ms-lease-state" : "available", + "Last-Modified" : "Fri, 23 Jul 2021 22:43:49 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Jul 2021 22:43:49 GMT", + "Accept-Ranges" : "bytes", + "x-ms-server-encrypted" : "true", + "x-ms-type" : "File", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2021-07-23T22:43:49.0303180Z", + "x-ms-file-parent-id" : "0", + "eTag" : "0x8D94E2B566EE0CC", + "x-ms-request-id" : "eb68020b-101a-0028-6e14-80bb6a000000", + "x-ms-client-request-id" : "01739042-a73a-4650-a9ed-80b3572db494", + "x-ms-file-last-write-time" : "2021-07-23T22:43:49.0303180Z", + "Content-Type" : "application/octet-stream" + }, + "Exception" : null + } ], + "variables" : [ "9d333c709d333c70fba94600fd73eec9fb234ee0a6", "9d333c709d333c70fba40108939f74771690471384" ] +} \ No newline at end of file diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[1].json b/sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[1].json new file mode 100644 index 000000000000..3d81eea985f8 --- /dev/null +++ b/sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[1].json @@ -0,0 +1,89 @@ +{ + "networkCallRecords" : [ { + "Method" : "PUT", + "Uri" : "http://REDACTED.file.core.windows.net/84280d3184280d316c5987171a54c1eb72a24bf5a4?restype=share", + "Headers" : { + "x-ms-version" : "2020-10-02", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.11.0-beta.1 (11.0.7; Windows 10; 10.0)", + "x-ms-client-request-id" : "5ce6a806-65da-4418-950c-ec29848ef929" + }, + "Response" : { + "content-length" : "0", + "x-ms-version" : "2020-10-02", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "eTag" : "0x8D94E2B56245AF9", + "Last-Modified" : "Fri, 23 Jul 2021 22:43:48 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-id" : "053a3157-101a-0007-6a14-80b6a1000000", + "x-ms-client-request-id" : "5ce6a806-65da-4418-950c-ec29848ef929", + "Date" : "Fri, 23 Jul 2021 22:43:47 GMT" + }, + "Exception" : null + }, { + "Method" : "PUT", + "Uri" : "http://REDACTED.file.core.windows.net/84280d3184280d316c5987171a54c1eb72a24bf5a4/84280d3184280d316c56691523bafecac27c4bb0bc", + "Headers" : { + "x-ms-version" : "2020-10-02", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.11.0-beta.1 (11.0.7; Windows 10; 10.0)", + "x-ms-client-request-id" : "ef9391e2-d996-4790-a675-fff7718f97d1" + }, + "Response" : { + "content-length" : "0", + "x-ms-version" : "2020-10-02", + "x-ms-file-permission-key" : "8870206874218656067*15256408171089631693", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2021-07-23T22:43:49.0313178Z", + "Last-Modified" : "Fri, 23 Jul 2021 22:43:49 GMT", + "retry-after" : "0", + "StatusCode" : "201", + "x-ms-request-server-encrypted" : "true", + "Date" : "Fri, 23 Jul 2021 22:43:49 GMT", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2021-07-23T22:43:49.0313178Z", + "x-ms-file-parent-id" : "0", + "eTag" : "0x8D94E2B566F07DA", + "x-ms-request-id" : "eb680203-101a-0028-6b14-80bb6a000000", + "x-ms-client-request-id" : "ef9391e2-d996-4790-a675-fff7718f97d1", + "x-ms-file-last-write-time" : "2021-07-23T22:43:49.0313178Z" + }, + "Exception" : null + }, { + "Method" : "GET", + "Uri" : "http://REDACTED.file.core.windows.net/84280d3184280d316c5987171a54c1eb72a24bf5a4/84280d3184280d316c56691523bafecac27c4bb0bc", + "Headers" : { + "x-ms-version" : "2020-10-02", + "User-Agent" : "azsdk-java-azure-storage-file-share/12.11.0-beta.1 (11.0.7; Windows 10; 10.0)", + "x-ms-client-request-id" : "7238eebc-381d-4004-9452-0cd49eb5efd0" + }, + "Response" : { + "content-length" : "1", + "x-ms-version" : "2020-10-02", + "x-ms-lease-status" : "unlocked", + "x-ms-file-permission-key" : "8870206874218656067*15256408171089631693", + "x-ms-file-id" : "13835128424026341376", + "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-file-creation-time" : "2021-07-23T22:43:49.0313178Z", + "x-ms-lease-state" : "available", + "Last-Modified" : "Fri, 23 Jul 2021 22:43:49 GMT", + "retry-after" : "0", + "StatusCode" : "200", + "Date" : "Fri, 23 Jul 2021 22:43:48 GMT", + "Accept-Ranges" : "bytes", + "x-ms-server-encrypted" : "true", + "x-ms-type" : "File", + "x-ms-file-attributes" : "Archive", + "x-ms-file-change-time" : "2021-07-23T22:43:49.0313178Z", + "x-ms-file-parent-id" : "0", + "eTag" : "0x8D94E2B566F07DA", + "x-ms-request-id" : "053a3189-101a-0007-1214-80b6a1000000", + "Body" : "AA==", + "x-ms-client-request-id" : "7238eebc-381d-4004-9452-0cd49eb5efd0", + "x-ms-file-last-write-time" : "2021-07-23T22:43:49.0313178Z", + "Content-Type" : "application/octet-stream" + }, + "Exception" : null + } ], + "variables" : [ "84280d3184280d316c5987171a54c1eb72a24bf5a4", "84280d3184280d316c56691523bafecac27c4bb0bc" ] +} \ No newline at end of file From 9a8614507987a22a22f4f10f13603facc02af566 Mon Sep 17 00:00:00 2001 From: Rick Ley Date: Fri, 23 Jul 2021 15:49:00 -0700 Subject: [PATCH 3/5] Changelog --- sdk/storage/azure-storage-file-share/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/sdk/storage/azure-storage-file-share/CHANGELOG.md b/sdk/storage/azure-storage-file-share/CHANGELOG.md index 0ec72fbf2d01..435fb13022d2 100644 --- a/sdk/storage/azure-storage-file-share/CHANGELOG.md +++ b/sdk/storage/azure-storage-file-share/CHANGELOG.md @@ -3,6 +3,7 @@ ## 12.11.0-beta.1 (Unreleased) - Added support to reliably download a file. - Added support for the 2020-10-02 service version. +- Fixed a bug that was cause an Exception when downloading a zero length file. ## 12.10.0 (2021-06-09) - GA release From d65136169bc9c25b8984bdcb9215cd5f45e0f080 Mon Sep 17 00:00:00 2001 From: Rick Ley Date: Fri, 23 Jul 2021 15:50:21 -0700 Subject: [PATCH 4/5] Minor cleanup --- .../azure/storage/common/test/shared/TestEnvironment.java | 6 +++--- .../java/com/azure/storage/file/share/FileAPITests.groovy | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/sdk/storage/azure-storage-common/src/test-shared/java/com/azure/storage/common/test/shared/TestEnvironment.java b/sdk/storage/azure-storage-common/src/test-shared/java/com/azure/storage/common/test/shared/TestEnvironment.java index cad7066465ba..6a674e2daee6 100644 --- a/sdk/storage/azure-storage-common/src/test-shared/java/com/azure/storage/common/test/shared/TestEnvironment.java +++ b/sdk/storage/azure-storage-common/src/test-shared/java/com/azure/storage/common/test/shared/TestEnvironment.java @@ -79,18 +79,18 @@ private String readServiceVersionFromEnvironment() { private static TestAccount readTestAccountFromEnvironment(String prefix, TestMode testMode) { String name = "azstoragesdkaccount"; String key = "astorageaccountkey"; - String connectionString = "DefaultEndpointsProtocol=http;AccountName=teststorage;" + String connectionString = "DefaultEndpointsProtocol=https;AccountName=teststorage;" + "AccountKey=atestaccountkey;EndpointSuffix=core.windows.net"; if (testMode != TestMode.PLAYBACK) { name = Configuration.getGlobalConfiguration().get(prefix + "ACCOUNT_NAME"); key = Configuration.getGlobalConfiguration().get(prefix + "ACCOUNT_KEY"); connectionString = Configuration.getGlobalConfiguration().get(prefix + "CONNECTION_STRING"); if (connectionString == null || connectionString.trim().isEmpty()) { - connectionString = String.format("DefaultEndpointsProtocol=http;AccountName=%s;" + connectionString = String.format("DefaultEndpointsProtocol=https;AccountName=%s;" + "AccountKey=%s;EndpointSuffix=core.windows.net", name, key); } } - String blobEndpoint = String.format("http://%s.blob.core.windows.net", name); + String blobEndpoint = String.format("https://%s.blob.core.windows.net", name); String blobEndpointSecondary = String.format("https://%s-secondary.blob.core.windows.net", name); String dataLakeEndpoint = String.format("https://%s.dfs.core.windows.net", name); String queueEndpoint = String.format("https://%s.queue.core.windows.net", name); diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy index 187b6e98eb6d..b97b6edb7e29 100644 --- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy +++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAPITests.groovy @@ -440,7 +440,6 @@ class FileAPITests extends APISpec { assert !result[0] } - where: fileSize | _ 0 | _ From 8e2456f2517bbab867d40607ed980a5e121a98d9 Mon Sep 17 00:00:00 2001 From: Rick Ley Date: Mon, 26 Jul 2021 11:44:31 -0700 Subject: [PATCH 5/5] moved files to correct location --- .../FileAPITestsDownloadEmptyFile[0].json | 0 .../FileAPITestsDownloadEmptyFile[1].json | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename sdk/storage/azure-storage-file-share/src/test/resources/{testfiles => session-records}/FileAPITestsDownloadEmptyFile[0].json (100%) rename sdk/storage/azure-storage-file-share/src/test/resources/{testfiles => session-records}/FileAPITestsDownloadEmptyFile[1].json (100%) diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[0].json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsDownloadEmptyFile[0].json similarity index 100% rename from sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[0].json rename to sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsDownloadEmptyFile[0].json diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[1].json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsDownloadEmptyFile[1].json similarity index 100% rename from sdk/storage/azure-storage-file-share/src/test/resources/testfiles/FileAPITestsDownloadEmptyFile[1].json rename to sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsDownloadEmptyFile[1].json