diff --git a/eng/code-quality-reports/src/main/resources/revapi/revapi.json b/eng/code-quality-reports/src/main/resources/revapi/revapi.json
index eb8afd82f704..c5ead03aa977 100644
--- a/eng/code-quality-reports/src/main/resources/revapi/revapi.json
+++ b/eng/code-quality-reports/src/main/resources/revapi/revapi.json
@@ -241,6 +241,11 @@
"old": "class com.azure.messaging.eventhubs.EventHubClientBuilder",
"new": "class com.azure.messaging.eventhubs.EventHubClientBuilder",
"justification": "Setting protocol to AMQP in @ServiceClientBuilder annotation is not a breaking change"
+ },
+ {
+ "code": "java.annotation.added",
+ "new": "class com.azure.storage.blob.models.PageList",
+ "justification": "Annotation required to resolve deserialization bug."
}
]
}
diff --git a/sdk/storage/azure-storage-blob/CHANGELOG.md b/sdk/storage/azure-storage-blob/CHANGELOG.md
index b37dd0b02439..e4d89e6be650 100644
--- a/sdk/storage/azure-storage-blob/CHANGELOG.md
+++ b/sdk/storage/azure-storage-blob/CHANGELOG.md
@@ -1,7 +1,7 @@
# Release History
## 12.9.0-beta.3 (Unreleased)
-
+- Fixed a bug where interspersed element types returned by page listing would deserialize incorrectly.
## 12.9.0-beta.2 (2020-10-08)
- Added support to specify whether or not a pipeline policy should be added per call or per retry.
diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java
index 6df08b4bc9af..c2f1729e5b6d 100644
--- a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java
+++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageList.java
@@ -6,7 +6,9 @@
import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+
import java.util.ArrayList;
import java.util.List;
@@ -15,6 +17,7 @@
*/
@JacksonXmlRootElement(localName = "PageList")
@Fluent
+@JsonDeserialize(using = PageListDeserializer.class)
public final class PageList {
/*
* The pageRange property.
diff --git a/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageListDeserializer.java b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageListDeserializer.java
new file mode 100644
index 000000000000..d2832b599581
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/src/main/java/com/azure/storage/blob/models/PageListDeserializer.java
@@ -0,0 +1,73 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.storage.blob.models;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.core.JsonTokenId;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+/**
+ * Custom Jackson JsonDeserializer that handles deserializing PageList responses.
+ *
+ * PageList responses intersperse PageRange and ClearRange elements, without this deserializer if we received the
+ * following response the resulting PageList would only contain one PageRange element and one ClearRange element.
+ *
+ *
+ * {@code
+ *
+ *
+ *
+ * Start Byte
+ * End Byte
+ *
+ *
+ * Start Byte
+ * End Byte
+ *
+ *
+ * Start Byte
+ * End Byte
+ *
+ *
+ * }
+ *
+ *
+ * With the custom deserializer the response correctly returns two PageRange elements and one ClearRange element.
+ */
+final class PageListDeserializer extends JsonDeserializer {
+ @Override
+ public PageList deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+ ArrayList pageRanges = new ArrayList<>();
+ ArrayList clearRanges = new ArrayList<>();
+
+ // Get the deserializer that handles PageRange.
+ JsonDeserializer pageRangeDeserializer =
+ ctxt.findRootValueDeserializer(ctxt.constructType(PageRange.class));
+
+ // Get the deserializer that handles ClearRange.
+ JsonDeserializer clearRangeDeserializer =
+ ctxt.findRootValueDeserializer(ctxt.constructType(ClearRange.class));
+
+ for (JsonToken currentToken = p.nextToken(); currentToken.id() != JsonTokenId.ID_END_OBJECT;
+ currentToken = p.nextToken()) {
+ // Get to the root element of the next item.
+ p.nextToken();
+
+ if (p.getCurrentName().equals("PageRange")) {
+ // Current token is the node that begins a PageRange object.
+ pageRanges.add((PageRange) pageRangeDeserializer.deserialize(p, ctxt));
+ } else if (p.getCurrentName().equals("ClearRange")) {
+ // Current token is the node that begins a ClearRange object.
+ clearRanges.add((ClearRange) clearRangeDeserializer.deserialize(p, ctxt));
+ }
+ }
+
+ return new PageList().setPageRange(pageRanges).setClearRange(clearRanges);
+ }
+}
diff --git a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy
index 5fe929e0804f..f4fe36c310be 100644
--- a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy
+++ b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/HelperTest.groovy
@@ -3,11 +3,14 @@
package com.azure.storage.blob.specialized
+import com.azure.core.util.serializer.JacksonAdapter
+import com.azure.core.util.serializer.SerializerEncoding
import com.azure.storage.blob.APISpec
import com.azure.storage.blob.BlobContainerAsyncClient
import com.azure.storage.blob.BlobUrlParts
import com.azure.storage.blob.implementation.util.BlobSasImplUtil
import com.azure.storage.blob.models.BlobRange
+import com.azure.storage.blob.models.PageList
import com.azure.storage.blob.sas.BlobSasPermission
import com.azure.storage.blob.sas.BlobSasServiceVersion
import com.azure.storage.blob.sas.BlobServiceSasSignatureValues
@@ -142,4 +145,30 @@ class HelperTest extends APISpec {
.assertNext(){buffer -> assert buffer.compareTo(ByteBuffer.wrap(data)) == 0 }
.verifyComplete()
}
+
+ def "PageList custom deserializer"() {
+ setup:
+ def responseXml = " \n" +
+ " \n" +
+ " \n" +
+ " 0 \n" +
+ " 511 \n" +
+ " \n" +
+ " \n" +
+ " 512 \n" +
+ " 1023 \n" +
+ " \n" +
+ " \n" +
+ " 1024 \n" +
+ " 2047 \n" +
+ " \n" +
+ " "
+
+ when:
+ def pageList = (PageList) new JacksonAdapter().deserialize(responseXml, PageList.class, SerializerEncoding.XML)
+
+ then:
+ pageList.getPageRange().size() == 2
+ pageList.getClearRange().size() == 1
+ }
}
diff --git a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy
index e4973a38e9c8..e593df2d90e6 100644
--- a/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy
+++ b/sdk/storage/azure-storage-blob/src/test/java/com/azure/storage/blob/specialized/PageBlobAPITest.groovy
@@ -4,22 +4,25 @@
package com.azure.storage.blob.specialized
import com.azure.core.exception.UnexpectedLengthException
+import com.azure.core.util.CoreUtils
import com.azure.storage.blob.APISpec
import com.azure.storage.blob.BlobContainerClient
-import com.azure.storage.blob.models.PageBlobCopyIncrementalRequestConditions
import com.azure.storage.blob.models.BlobErrorCode
import com.azure.storage.blob.models.BlobHttpHeaders
import com.azure.storage.blob.models.BlobRange
import com.azure.storage.blob.models.BlobRequestConditions
import com.azure.storage.blob.models.BlobStorageException
+import com.azure.storage.blob.models.ClearRange
import com.azure.storage.blob.models.CopyStatusType
-import com.azure.storage.blob.options.BlobGetTagsOptions
-import com.azure.storage.blob.options.PageBlobCopyIncrementalOptions
-import com.azure.storage.blob.options.PageBlobCreateOptions
+import com.azure.storage.blob.models.PageBlobCopyIncrementalRequestConditions
import com.azure.storage.blob.models.PageBlobRequestConditions
import com.azure.storage.blob.models.PageRange
import com.azure.storage.blob.models.PublicAccessType
import com.azure.storage.blob.models.SequenceNumberActionType
+import com.azure.storage.blob.options.BlobGetTagsOptions
+import com.azure.storage.blob.options.PageBlobCopyIncrementalOptions
+import com.azure.storage.blob.options.PageBlobCreateOptions
+import com.azure.storage.common.implementation.Constants
import spock.lang.Ignore
import spock.lang.Unroll
@@ -196,7 +199,7 @@ class PageBlobAPITest extends APISpec {
null | null | garbageEtag | null | null | null
null | null | null | receivedEtag | null | null
null | null | null | null | garbageLeaseID | null
- null | null | null | null | null | "\"notfoo\" = 'notbar'"
+ null | null | null | null | null | "\"notfoo\" = 'notbar'"
}
def "Create error"() {
@@ -756,7 +759,7 @@ class PageBlobAPITest extends APISpec {
null | null | garbageEtag | null | null | null
null | null | null | receivedEtag | null | null
null | null | null | null | garbageLeaseID | null
- null | null | null | null | null | "\"notfoo\" = 'notbar'"
+ null | null | null | null | null | "\"notfoo\" = 'notbar'"
}
def "Get page ranges error"() {
@@ -770,32 +773,81 @@ class PageBlobAPITest extends APISpec {
thrown(BlobStorageException)
}
+ @Unroll
def "Get page ranges diff"() {
setup:
- bc.create(PageBlobClient.PAGE_BYTES * 2, true)
+ bc.create(4 * Constants.MB, true)
- bc.uploadPages(new PageRange().setStart(PageBlobClient.PAGE_BYTES).setEnd(PageBlobClient.PAGE_BYTES * 2 - 1),
- new ByteArrayInputStream(getRandomByteArray(PageBlobClient.PAGE_BYTES)))
+ bc.uploadPages(new PageRange().setStart(0).setEnd(4 * Constants.MB - 1),
+ new ByteArrayInputStream(getRandomByteArray(4 * Constants.MB)))
def snapId = bc.createSnapshot().getSnapshotId()
- bc.uploadPages(new PageRange().setStart(0).setEnd(PageBlobClient.PAGE_BYTES - 1),
- new ByteArrayInputStream(getRandomByteArray(PageBlobClient.PAGE_BYTES)))
+ rangesToUpdate.forEach({
+ bc.uploadPages(it, new ByteArrayInputStream(getRandomByteArray((int) (it.getEnd() - it.getStart()) + 1)))
+ })
- bc.clearPages(new PageRange().setStart(PageBlobClient.PAGE_BYTES).setEnd(PageBlobClient.PAGE_BYTES * 2 - 1))
+ rangesToClear.forEach({ bc.clearPages(it) })
when:
- def response = bc.getPageRangesDiffWithResponse(new BlobRange(0, PageBlobClient.PAGE_BYTES * 2), snapId, null, null, null)
+ def response = bc.getPageRangesDiffWithResponse(new BlobRange(0, 4 * Constants.MB), snapId, null, null, null)
then:
- response.getValue().getPageRange().size() == 1
- response.getValue().getPageRange().get(0).getStart() == 0
- response.getValue().getPageRange().get(0).getEnd() == PageBlobClient.PAGE_BYTES - 1
- response.getValue().getClearRange().size() == 1
- response.getValue().getClearRange().get(0).getStart() == PageBlobClient.PAGE_BYTES
- response.getValue().getClearRange().get(0).getEnd() == PageBlobClient.PAGE_BYTES * 2 - 1
validateBasicHeaders(response.getHeaders())
- Integer.parseInt(response.getHeaders().getValue("x-ms-blob-content-length")) == PageBlobClient.PAGE_BYTES * 2
+ response.getValue().getPageRange().size() == expectedPageRanges.size()
+ response.getValue().getClearRange().size() == expectedClearRanges.size()
+
+ for (def i = 0; i < expectedPageRanges.size(); i++) {
+ def actualRange = response.getValue().getPageRange().get(i)
+ def expectedRange = expectedPageRanges.get(i)
+ expectedRange.getStart() == actualRange.getStart()
+ expectedRange.getEnd() == actualRange.getEnd()
+ }
+
+ for (def i = 0; i < expectedClearRanges.size(); i++) {
+ def actualRange = response.getValue().getClearRange().get(i)
+ def expectedRange = expectedClearRanges.get(i)
+ expectedRange.getStart() == actualRange.getStart()
+ expectedRange.getEnd() == actualRange.getEnd()
+ }
+
+ Integer.parseInt(response.getHeaders().getValue("x-ms-blob-content-length")) == 4 * Constants.MB
+
+ where:
+ rangesToUpdate | rangesToClear | expectedPageRanges | expectedClearRanges
+ createPageRanges() | createPageRanges() | createPageRanges() | createClearRanges()
+ createPageRanges(0, 511) | createPageRanges() | createPageRanges(0, 511) | createClearRanges()
+ createPageRanges() | createPageRanges(0, 511) | createPageRanges() | createClearRanges(0, 511)
+ createPageRanges(0, 511) | createPageRanges(512, 1023) | createPageRanges(0, 511) | createClearRanges(512, 1023)
+ createPageRanges(0, 511, 1024, 1535) | createPageRanges(512, 1023, 1536, 2047) | createPageRanges(0, 511, 1024, 1535) | createClearRanges(512, 1023, 1536, 2047)
+ }
+
+ static def createPageRanges(long... offsets) {
+ def pageRanges = [] as List
+
+ if (CoreUtils.isNullOrEmpty(offsets)) {
+ return pageRanges
+ }
+
+ for (def i = 0; i < offsets.length / 2; i++) {
+ pageRanges.add(new PageRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1]))
+ }
+
+ return pageRanges
+ }
+
+ static def createClearRanges(long... offsets) {
+ def clearRanges = [] as List
+
+ if (CoreUtils.isNullOrEmpty(offsets)) {
+ return clearRanges
+ }
+
+ for (def i = 0; i < offsets.length / 2; i++) {
+ clearRanges.add(new ClearRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1]))
+ }
+
+ return clearRanges
}
def "Get page ranges diff min"() {
@@ -867,7 +919,7 @@ class PageBlobAPITest extends APISpec {
null | null | garbageEtag | null | null | null
null | null | null | receivedEtag | null | null
null | null | null | null | garbageLeaseID | null
- null | null | null | null | null | "\"notfoo\" = 'notbar'"
+ null | null | null | null | null | "\"notfoo\" = 'notbar'"
}
def "Get page ranges diff error"() {
@@ -1178,13 +1230,13 @@ class PageBlobAPITest extends APISpec {
bu2.copyIncrementalWithResponse(new PageBlobCopyIncrementalOptions(bc.getBlobUrl(), snapshot).setRequestConditions(mac), null, null).getStatusCode() == 202
where:
- modified | unmodified | match | noneMatch | tags
- null | null | null | null | null
- oldDate | null | null | null | null
- null | newDate | null | null | null
- null | null | receivedEtag | null | null
- null | null | null | garbageEtag | null
- null | null | null | null | "\"foo\" = 'bar'"
+ modified | unmodified | match | noneMatch | tags
+ null | null | null | null | null
+ oldDate | null | null | null | null
+ null | newDate | null | null | null
+ null | null | receivedEtag | null | null
+ null | null | null | garbageEtag | null
+ null | null | null | null | "\"foo\" = 'bar'"
}
@Unroll
@@ -1204,18 +1256,18 @@ class PageBlobAPITest extends APISpec {
.setTagsConditions(tags)
when:
- bu2.copyIncrementalWithResponse(new PageBlobCopyIncrementalOptions(bc.getBlobUrl(), snapshot).setRequestConditions(mac),null, null)
+ bu2.copyIncrementalWithResponse(new PageBlobCopyIncrementalOptions(bc.getBlobUrl(), snapshot).setRequestConditions(mac), null, null)
then:
thrown(BlobStorageException)
where:
- modified | unmodified | match | noneMatch | tags
- newDate | null | null | null | null
- null | oldDate | null | null | null
- null | null | garbageEtag | null | null
- null | null | null | receivedEtag | null
- null | null | null | null | "\"notfoo\" = 'notbar'"
+ modified | unmodified | match | noneMatch | tags
+ newDate | null | null | null | null
+ null | oldDate | null | null | null
+ null | null | garbageEtag | null | null
+ null | null | null | receivedEtag | null
+ null | null | null | null | "\"notfoo\" = 'notbar'"
}
def "Start incremental copy error"() {
diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/HelperTestpagelistcustomdeserializer.json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/HelperTestpagelistcustomdeserializer.json
new file mode 100644
index 000000000000..e78a62326efc
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/HelperTestpagelistcustomdeserializer.json
@@ -0,0 +1,67 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcpagelistcustomdeserializer0983603c0fdf6584964d?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "966b1253-e957-4f27-84fb-c3c9d9cfb539"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D876CD36648A7A",
+ "Last-Modified" : "Thu, 22 Oct 2020 20:58:22 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "46435c5d-d01e-00f3-80b6-a8e31f000000",
+ "Date" : "Thu, 22 Oct 2020 20:58:21 GMT",
+ "x-ms-client-request-id" : "966b1253-e957-4f27-84fb-c3c9d9cfb539"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcpagelistcustomdeserializer&comp=list",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "e38068eb-1e45-4701-848f-4919f2cfeefe"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "Access-Control-Expose-Headers" : "x-ms-client-request-id",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "Access-Control-Allow-Origin" : "*",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "x-ms-request-id" : "4643a2d6-d01e-00f3-51b6-a8e31f000000",
+ "Body" : "jtcpagelistcustomdeserializer jtcpagelistcustomdeserializer0983603c0fdf6584964d Thu, 22 Oct 2020 20:58:22 GMT \"0x8D876CD36648A7A\" unlocked available $account-encryption-key false false false ",
+ "Date" : "Thu, 22 Oct 2020 21:00:23 GMT",
+ "x-ms-client-request-id" : "e38068eb-1e45-4701-848f-4919f2cfeefe",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "DELETE",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcpagelistcustomdeserializer0983603c0fdf6584964d?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "a372d6b7-71ea-47d7-8dda-6d87d2ed519d"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "202",
+ "x-ms-request-id" : "4643a2e2-d01e-00f3-59b6-a8e31f000000",
+ "Date" : "Thu, 22 Oct 2020 21:00:23 GMT",
+ "x-ms-client-request-id" : "a372d6b7-71ea-47d7-8dda-6d87d2ed519d"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "jtcpagelistcustomdeserializer0983603c0fdf6584964d" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[0].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[0].json
new file mode 100644
index 000000000000..a1a912a26659
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[0].json
@@ -0,0 +1,185 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "d8ace183-1be6-46cf-9013-e4c3da9b923e"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781A1464F0F",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:29:51 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c4c5e-c01e-00ce-5c6a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:29:50 GMT",
+ "x-ms-client-request-id" : "d8ace183-1be6-46cf-9013-e4c3da9b923e"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "5496780e-cb50-41af-af74-80e3a8796ac4"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781A16D1110",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:29:51 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c4cb2-c01e-00ce-216a-a95639000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:29:50 GMT",
+ "x-ms-client-request-id" : "5496780e-cb50-41af-af74-80e3a8796ac4"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "e69f7a0f-93be-47b6-a6ff-c6cdf742ac5d"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781A1774CC0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:29:51 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c4cc2-c01e-00ce-316a-a95639000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:29:50 GMT",
+ "x-ms-client-request-id" : "e69f7a0f-93be-47b6-a6ff-c6cdf742ac5d"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "a5732c34-8b6f-4c50-a106-40765456c596",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-crc64" : "KLABNSKwPwQ=",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:29:56 GMT",
+ "ETag" : "0x8D87781A4E7F5C3",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "ee1c4cdf-c01e-00ce-456a-a95639000000",
+ "x-ms-client-request-id" : "a5732c34-8b6f-4c50-a106-40765456c596"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0?comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "ae42281e-c199-4087-b22e-e925d47d15d3"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T18:29:57.4867608Z",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781A4E7F5C3",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c53e8-c01e-00ce-566a-a95639000000",
+ "x-ms-request-server-encrypted" : "false",
+ "Date" : "Fri, 23 Oct 2020 18:29:56 GMT",
+ "x-ms-client-request-id" : "ae42281e-c199-4087-b22e-e925d47d15d3"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775/javablobgetpagerangesdiff1414537ab5c849b3ff44b0?prevsnapshot=2020-10-23T18%3A29%3A57.4867608Z&comp=pagelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "e68ba305-e8b6-4fbe-a2cc-a0b33ebd1f85"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-blob-content-length" : "4194304",
+ "Access-Control-Allow-Origin" : "*",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 18:29:56 GMT",
+ "Access-Control-Expose-Headers" : "x-ms-client-request-id",
+ "ETag" : "0x8D87781A4E7F5C3",
+ "x-ms-request-id" : "ee1c53fe-c01e-00ce-676a-a95639000000",
+ "Body" : " ",
+ "x-ms-client-request-id" : "e68ba305-e8b6-4fbe-a2cc-a0b33ebd1f85",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "c5cafb87-bc16-4515-838f-1aff3cce6c5f"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "Access-Control-Expose-Headers" : "x-ms-client-request-id",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "Access-Control-Allow-Origin" : "*",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "x-ms-request-id" : "ee1c5432-c01e-00ce-106a-a95639000000",
+ "Body" : "jtcgetpagerangesdiff jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775 Fri, 23 Oct 2020 18:29:51 GMT \"0x8D87781A1464F0F\" unlocked available $account-encryption-key false false false ",
+ "Date" : "Fri, 23 Oct 2020 18:29:56 GMT",
+ "x-ms-client-request-id" : "c5cafb87-bc16-4515-838f-1aff3cce6c5f",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "DELETE",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "5c5ce396-94be-4687-8080-690a99e4ef3b"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "202",
+ "x-ms-request-id" : "ee1c544a-c01e-00ce-236a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:29:56 GMT",
+ "x-ms-client-request-id" : "5c5ce396-94be-4687-8080-690a99e4ef3b"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775", "javablobgetpagerangesdiff1414537ab5c849b3ff44b0", "ef2297af-747d-4e79-ac2b-9e1896da1144" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[1].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[1].json
new file mode 100644
index 000000000000..30e4a7ed9e2c
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[1].json
@@ -0,0 +1,210 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "25cf2a8e-d21a-4f91-8dbe-930000aa6879"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781A52604CF",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c545f-c01e-00ce-356a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:29:57 GMT",
+ "x-ms-client-request-id" : "25cf2a8e-d21a-4f91-8dbe-930000aa6879"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "a1f02e09-4c16-4f1f-a613-84a589658efb"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781A52CFED6",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c5476-c01e-00ce-466a-a95639000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:29:57 GMT",
+ "x-ms-client-request-id" : "a1f02e09-4c16-4f1f-a613-84a589658efb"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "a92fb514-37b9-4df6-b89f-0ee20cc6ec5d"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781A5342C7E",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:29:57 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c5487-c01e-00ce-556a-a95639000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:29:57 GMT",
+ "x-ms-client-request-id" : "a92fb514-37b9-4df6-b89f-0ee20cc6ec5d"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "9cd58e52-0b6d-4b8d-974b-72ff1f336796",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-crc64" : "HKzsv2qN0jc=",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:02 GMT",
+ "ETag" : "0x8D87781A89C6F02",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "ee1c54b3-c01e-00ce-796a-a95639000000",
+ "x-ms-client-request-id" : "9cd58e52-0b6d-4b8d-974b-72ff1f336796"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "813f95c7-3b0e-4937-a7f0-ae8e072769c8"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T18:30:03.6956707Z",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781A89C6F02",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c5ddd-c01e-00ce-6a6a-a95639000000",
+ "x-ms-request-server-encrypted" : "false",
+ "Date" : "Fri, 23 Oct 2020 18:30:02 GMT",
+ "x-ms-client-request-id" : "813f95c7-3b0e-4937-a7f0-ae8e072769c8"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "34f58426-2c6a-480b-a363-6cc5359a19b1",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-crc64" : "PIjD7cc1O88=",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:02 GMT",
+ "ETag" : "0x8D87781A8AFAD8A",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "ee1c5e00-c01e-00ce-056a-a95639000000",
+ "x-ms-client-request-id" : "34f58426-2c6a-480b-a363-6cc5359a19b1"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127/javablobgetpagerangesdiff115541f331cc6cbd2745dc?prevsnapshot=2020-10-23T18%3A30%3A03.6956707Z&comp=pagelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "f0026ab8-1a03-4c33-a380-f0ef22c4b5b1"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-blob-content-length" : "4194304",
+ "Access-Control-Allow-Origin" : "*",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 18:30:02 GMT",
+ "Access-Control-Expose-Headers" : "x-ms-client-request-id",
+ "ETag" : "0x8D87781A8AFAD8A",
+ "x-ms-request-id" : "ee1c5e12-c01e-00ce-136a-a95639000000",
+ "Body" : "0 511 ",
+ "x-ms-client-request-id" : "f0026ab8-1a03-4c33-a380-f0ef22c4b5b1",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "3363f50a-64b6-4cf7-bd69-944488e8e028"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "Access-Control-Expose-Headers" : "x-ms-client-request-id",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "Access-Control-Allow-Origin" : "*",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "x-ms-request-id" : "ee1c5e2a-c01e-00ce-276a-a95639000000",
+ "Body" : "jtcgetpagerangesdiff jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127 Fri, 23 Oct 2020 18:29:57 GMT \"0x8D87781A52604CF\" unlocked available $account-encryption-key false false false ",
+ "Date" : "Fri, 23 Oct 2020 18:30:03 GMT",
+ "x-ms-client-request-id" : "3363f50a-64b6-4cf7-bd69-944488e8e028",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "DELETE",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "8f00712a-a24c-41be-b85e-29c1f56db346"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "202",
+ "x-ms-request-id" : "ee1c5e37-c01e-00ce-326a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:30:03 GMT",
+ "x-ms-client-request-id" : "8f00712a-a24c-41be-b85e-29c1f56db346"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127", "javablobgetpagerangesdiff115541f331cc6cbd2745dc", "c55fe123-ffa3-48ab-9811-859f9991d7fb", "f7eeeee4-265b-4367-a01b-cd84c150ed83" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[2].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[2].json
new file mode 100644
index 000000000000..e78d0a87ede8
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[2].json
@@ -0,0 +1,207 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "0868ce82-a562-437c-a384-a43137148a9a"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781A8CBB041",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c5e52-c01e-00ce-496a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:30:03 GMT",
+ "x-ms-client-request-id" : "0868ce82-a562-437c-a384-a43137148a9a"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "44236b6d-9cb3-4de2-aa4b-6436c68fe838"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781A8D23213",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:03 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c5e61-c01e-00ce-566a-a95639000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:03 GMT",
+ "x-ms-client-request-id" : "44236b6d-9cb3-4de2-aa4b-6436c68fe838"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "a2427a9c-4eba-419e-b201-3bc28441c425"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781A8D89C48",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:04 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c5e76-c01e-00ce-666a-a95639000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:03 GMT",
+ "x-ms-client-request-id" : "a2427a9c-4eba-419e-b201-3bc28441c425"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "da64ee1e-e915-4076-afe4-d01a65e1f12e",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-crc64" : "4XsU0IKECEc=",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:08 GMT",
+ "ETag" : "0x8D87781AC3A9BB3",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "ee1c5e91-c01e-00ce-7b6a-a95639000000",
+ "x-ms-client-request-id" : "da64ee1e-e915-4076-afe4-d01a65e1f12e"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "ab4776b7-5acb-41fa-907a-2a4b7bfa2241"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T18:30:09.7634469Z",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781AC3A9BB3",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c6875-c01e-00ce-1d6a-a95639000000",
+ "x-ms-request-server-encrypted" : "false",
+ "Date" : "Fri, 23 Oct 2020 18:30:08 GMT",
+ "x-ms-client-request-id" : "ab4776b7-5acb-41fa-907a-2a4b7bfa2241"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "983f8c53-9ecf-46b9-81a6-3012a534b288"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781AC4C050C",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c688c-c01e-00ce-336a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:30:08 GMT",
+ "x-ms-client-request-id" : "983f8c53-9ecf-46b9-81a6-3012a534b288"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b/javablobgetpagerangesdiff1196179d8ab59ce69d47ed?prevsnapshot=2020-10-23T18%3A30%3A09.7634469Z&comp=pagelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "80a2da27-820a-41ca-9336-6c5ea92644f2"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-blob-content-length" : "4194304",
+ "Access-Control-Allow-Origin" : "*",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 18:30:09 GMT",
+ "Access-Control-Expose-Headers" : "x-ms-client-request-id",
+ "ETag" : "0x8D87781AC4C050C",
+ "x-ms-request-id" : "ee1c689c-c01e-00ce-436a-a95639000000",
+ "Body" : "0 511 ",
+ "x-ms-client-request-id" : "80a2da27-820a-41ca-9336-6c5ea92644f2",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "8636f340-98e1-40d6-ab18-295f66022566"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "Access-Control-Expose-Headers" : "x-ms-client-request-id",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "Access-Control-Allow-Origin" : "*",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "x-ms-request-id" : "ee1c68bd-c01e-00ce-626a-a95639000000",
+ "Body" : "jtcgetpagerangesdiff jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b Fri, 23 Oct 2020 18:30:03 GMT \"0x8D87781A8CBB041\" unlocked available $account-encryption-key false false false ",
+ "Date" : "Fri, 23 Oct 2020 18:30:09 GMT",
+ "x-ms-client-request-id" : "8636f340-98e1-40d6-ab18-295f66022566",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "DELETE",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "1c5f19c1-249f-498f-94b2-8914b9480300"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "202",
+ "x-ms-request-id" : "ee1c68d5-c01e-00ce-766a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:30:09 GMT",
+ "x-ms-client-request-id" : "1c5f19c1-249f-498f-94b2-8914b9480300"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384b", "javablobgetpagerangesdiff1196179d8ab59ce69d47ed", "a35d2b8f-23e4-4788-b4c9-92f0b7bafba7" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[3].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[3].json
new file mode 100644
index 000000000000..3c3d10af29fc
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[3].json
@@ -0,0 +1,232 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "e883719a-2424-42f7-8dca-f6e48af1b577"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781AC67E3B9",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:09 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c68ee-c01e-00ce-0b6a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:30:09 GMT",
+ "x-ms-client-request-id" : "e883719a-2424-42f7-8dca-f6e48af1b577"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "6580cdd2-3eef-42e1-a380-e23e406f518f"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781AC6E89B2",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:10 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c6901-c01e-00ce-1b6a-a95639000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:09 GMT",
+ "x-ms-client-request-id" : "6580cdd2-3eef-42e1-a380-e23e406f518f"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "e0a6bad4-5f13-4cdd-a94c-c55bdcee623a"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781AC7541F4",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:10 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c6920-c01e-00ce-326a-a95639000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:09 GMT",
+ "x-ms-client-request-id" : "e0a6bad4-5f13-4cdd-a94c-c55bdcee623a"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "b1bd7265-e5b0-4193-81e9-e9f303cca680",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-crc64" : "yNKI+KPfNUQ=",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:14 GMT",
+ "ETag" : "0x8D87781AFD7B6F0",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "ee1c6950-c01e-00ce-5c6a-a95639000000",
+ "x-ms-client-request-id" : "b1bd7265-e5b0-4193-81e9-e9f303cca680"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "b390e77e-9453-4c63-b7e8-d1b2a736eaf9"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T18:30:15.8302279Z",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781AFD7B6F0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c733a-c01e-00ce-5f6a-a95639000000",
+ "x-ms-request-server-encrypted" : "false",
+ "Date" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "x-ms-client-request-id" : "b390e77e-9453-4c63-b7e8-d1b2a736eaf9"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "18a7c7df-3f79-4bf2-8a78-489473b3687a",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-crc64" : "7cBhePr62ZU=",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "ETag" : "0x8D87781AFE9E3C2",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "ee1c7344-c01e-00ce-676a-a95639000000",
+ "x-ms-client-request-id" : "18a7c7df-3f79-4bf2-8a78-489473b3687a"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "b477f3f6-3a6c-4f8b-89aa-1965bced3586"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781AFEFB18C",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c7356-c01e-00ce-766a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "x-ms-client-request-id" : "b477f3f6-3a6c-4f8b-89aa-1965bced3586"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895/javablobgetpagerangesdiff189414bcfecd4ea50f4ff7?prevsnapshot=2020-10-23T18%3A30%3A15.8302279Z&comp=pagelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "123383b8-f36d-483c-9430-ef57dc0f47d3"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-blob-content-length" : "4194304",
+ "Access-Control-Allow-Origin" : "*",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "Access-Control-Expose-Headers" : "x-ms-client-request-id",
+ "ETag" : "0x8D87781AFEFB18C",
+ "x-ms-request-id" : "ee1c736e-c01e-00ce-0a6a-a95639000000",
+ "Body" : "0 511 512 1023 ",
+ "x-ms-client-request-id" : "123383b8-f36d-483c-9430-ef57dc0f47d3",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "96294756-3d23-41d4-aafb-3b024d5e6c8d"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "Access-Control-Expose-Headers" : "x-ms-client-request-id",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "Access-Control-Allow-Origin" : "*",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "x-ms-request-id" : "ee1c7382-c01e-00ce-196a-a95639000000",
+ "Body" : "jtcgetpagerangesdiff jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895 Fri, 23 Oct 2020 18:30:09 GMT \"0x8D87781AC67E3B9\" unlocked available $account-encryption-key false false false ",
+ "Date" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "x-ms-client-request-id" : "96294756-3d23-41d4-aafb-3b024d5e6c8d",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "DELETE",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "cd0b7899-15c9-4899-be4e-d69649fd676b"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "202",
+ "x-ms-request-id" : "ee1c738f-c01e-00ce-246a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "x-ms-client-request-id" : "cd0b7899-15c9-4899-be4e-d69649fd676b"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895", "javablobgetpagerangesdiff189414bcfecd4ea50f4ff7", "f344e7b0-c396-42b0-bd4b-1d970e75d57a", "fd8c4c6b-b8c6-4cbf-9328-c9e52741ccaf" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[4].json b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[4].json
new file mode 100644
index 000000000000..0b035d2e3061
--- /dev/null
+++ b/sdk/storage/azure-storage-blob/src/test/resources/session-records/PageBlobAPITestgetpagerangesdiff[4].json
@@ -0,0 +1,279 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "5616519c-16d5-4be0-9993-31cde0e36158"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781B00B6BD2",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:16 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c73a2-c01e-00ce-366a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "x-ms-client-request-id" : "5616519c-16d5-4be0-9993-31cde0e36158"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "a666f0a2-dd07-4034-af48-e994ee20630d"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781B01347C6",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:16 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c73ac-c01e-00ce-3f6a-a95639000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "x-ms-client-request-id" : "a666f0a2-dd07-4034-af48-e994ee20630d"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "c864d31f-85ac-4a29-8e30-f19b79e2135a"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781B01C71C1",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:16 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c73cc-c01e-00ce-5b6a-a95639000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:15 GMT",
+ "x-ms-client-request-id" : "c864d31f-85ac-4a29-8e30-f19b79e2135a"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "00370d0d-ca07-4f7d-90c8-f8dba82314bc",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-crc64" : "SkN3THoGiP0=",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:21 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:21 GMT",
+ "ETag" : "0x8D87781B383C9A8",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "ee1c73e5-c01e-00ce-6e6a-a95639000000",
+ "x-ms-client-request-id" : "00370d0d-ca07-4f7d-90c8-f8dba82314bc"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "4af1b117-6092-46c1-9db9-ec23b4e462c5"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T18:30:21.9920928Z",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781B383C9A8",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:21 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c7d99-c01e-00ce-546a-a95639000000",
+ "x-ms-request-server-encrypted" : "false",
+ "Date" : "Fri, 23 Oct 2020 18:30:21 GMT",
+ "x-ms-client-request-id" : "4af1b117-6092-46c1-9db9-ec23b4e462c5"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "92fe77b4-c37c-4c9d-863a-5b7b58b8c3d1",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-crc64" : "R+7y7u/mlmU=",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:21 GMT",
+ "ETag" : "0x8D87781B395CF70",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "ee1c7dad-c01e-00ce-676a-a95639000000",
+ "x-ms-client-request-id" : "92fe77b4-c37c-4c9d-863a-5b7b58b8c3d1"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "9ab62d75-3b70-481b-871f-7c3fc71ed1a0",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-crc64" : "zpW0pVt4+9c=",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 18:30:21 GMT",
+ "ETag" : "0x8D87781B39C60B3",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "ee1c7dc8-c01e-00ce-7e6a-a95639000000",
+ "x-ms-client-request-id" : "9ab62d75-3b70-481b-871f-7c3fc71ed1a0"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "7702fa6d-8ebe-4972-9131-4b5b8604e068"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781B3A38E61",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c7dd9-c01e-00ce-0f6a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:30:21 GMT",
+ "x-ms-client-request-id" : "7702fa6d-8ebe-4972-9131-4b5b8604e068"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?comp=page",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "2f9966ee-c64d-4443-9bcc-82e56b05678f"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87781B3A9D17E",
+ "x-ms-blob-sequence-number" : "0",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "ee1c7ddf-c01e-00ce-156a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:30:21 GMT",
+ "x-ms-client-request-id" : "2f9966ee-c64d-4443-9bcc-82e56b05678f"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e/javablobgetpagerangesdiff110215b26d03ead2e94975?prevsnapshot=2020-10-23T18%3A30%3A21.9920928Z&comp=pagelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "11efcea2-b86b-454e-860c-5f8c366fc7e2"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-blob-content-length" : "4194304",
+ "Access-Control-Allow-Origin" : "*",
+ "Last-Modified" : "Fri, 23 Oct 2020 18:30:22 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 18:30:21 GMT",
+ "Access-Control-Expose-Headers" : "x-ms-client-request-id",
+ "ETag" : "0x8D87781B3A9D17E",
+ "x-ms-request-id" : "ee1c7df1-c01e-00ce-256a-a95639000000",
+ "Body" : "0 511 512 1023 1024 1535 1536 2047 ",
+ "x-ms-client-request-id" : "11efcea2-b86b-454e-860c-5f8c366fc7e2",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.blob.core.windows.net?prefix=jtcgetpagerangesdiff&comp=list",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "df8cb1ba-7fcc-422e-af2f-ed06d04af5fd"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "Access-Control-Expose-Headers" : "x-ms-client-request-id",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "Access-Control-Allow-Origin" : "*",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "x-ms-request-id" : "ee1c7e08-c01e-00ce-386a-a95639000000",
+ "Body" : "jtcgetpagerangesdiff jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e Fri, 23 Oct 2020 18:30:16 GMT \"0x8D87781B00B6BD2\" unlocked available $account-encryption-key false false false ",
+ "Date" : "Fri, 23 Oct 2020 18:30:21 GMT",
+ "x-ms-client-request-id" : "df8cb1ba-7fcc-422e-af2f-ed06d04af5fd",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "DELETE",
+ "Uri" : "https://REDACTED.blob.core.windows.net/jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e?restype=container",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-blob/12.9.0-beta.3 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "dcf7bcae-2017-456f-9bab-0e63fac6118f"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "202",
+ "x-ms-request-id" : "ee1c7e1c-c01e-00ce-476a-a95639000000",
+ "Date" : "Fri, 23 Oct 2020 18:30:21 GMT",
+ "x-ms-client-request-id" : "dcf7bcae-2017-456f-9bab-0e63fac6118f"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "jtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411e", "javablobgetpagerangesdiff110215b26d03ead2e94975", "f0b8a9f3-02f0-48f7-9922-1c22951ef40e", "e1054127-05aa-4568-8571-e776cb204c7e", "6dde5b1e-8e0f-4f60-992a-b0c4adcc85d7" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-blob/swagger/README.md b/sdk/storage/azure-storage-blob/swagger/README.md
index 70b01c2d531b..0d8b599f815d 100644
--- a/sdk/storage/azure-storage-blob/swagger/README.md
+++ b/sdk/storage/azure-storage-blob/swagger/README.md
@@ -894,6 +894,21 @@ directive:
"@JsonDeserialize(using = CustomHierarchicalListingDeserializer.class)\npublic final class BlobHierarchyListSegment {");
```
+### Add the PageListDeserializer attribute
+``` yaml
+directive:
+- from: PageList.java
+ where: $
+ transform: >
+ return $.
+ replace(
+ "import com.fasterxml.jackson.annotation.JsonProperty;",
+ "import com.fasterxml.jackson.annotation.JsonProperty;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;").
+ replace(
+ "public final class PageList {",
+ "@JsonDeserialize(using = PageListDeserializer.class)\npublic final class PageList {");
+```
+
### Add EncryptionKeySha256 to PageBlobUploadPagesFromURLHeaders
``` yaml
directive:
diff --git a/sdk/storage/azure-storage-file-share/CHANGELOG.md b/sdk/storage/azure-storage-file-share/CHANGELOG.md
index 5102f303de8d..3c36c8a58832 100644
--- a/sdk/storage/azure-storage-file-share/CHANGELOG.md
+++ b/sdk/storage/azure-storage-file-share/CHANGELOG.md
@@ -4,6 +4,7 @@
- Added support to specify whether or not a pipeline policy should be added per call or per retry.
- Added support for setting access tier on a share through ShareClient.create, ShareClient.setAccessTier.
- Added support for getting access tier on a share through ShareClient.getProperties, ShareServiceClient.listShares
+- Fixed a bug where interspersed element types returned by range diff listing would deserialize incorrectly.
- Renamed setAccessTier to setProperties and deprecated setQuotaInGb in favor of setProperties.
- Renamed DeleteSnapshotsOptionType to ShareSnapshotsDeleteOptionType in ShareClient.delete
- Removed ability to create a ShareLeaseClient for a Share or Share Snapshot. This feature has been rescheduled for future release.
diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java
index cedb2f7987d8..94cc8d543036 100644
--- a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java
+++ b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeList.java
@@ -6,6 +6,7 @@
import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import java.util.ArrayList;
import java.util.List;
@@ -15,6 +16,7 @@
*/
@JacksonXmlRootElement(localName = "ShareFileRangeList")
@Fluent
+@JsonDeserialize(using = ShareFileRangeListDeserializer.class)
public final class ShareFileRangeList {
/*
* The ranges property.
diff --git a/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeListDeserializer.java b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeListDeserializer.java
new file mode 100644
index 000000000000..a6e912f49a57
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/main/java/com/azure/storage/file/share/models/ShareFileRangeListDeserializer.java
@@ -0,0 +1,74 @@
+// Copyright (c) Microsoft Corporation. All rights reserved.
+// Licensed under the MIT License.
+
+package com.azure.storage.file.share.models;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.core.JsonTokenId;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+/**
+ * Custom Jackson JsonDeserializer that handles deserializing ShareFileRangeList responses.
+ *
+ * ShareFileRangeList responses intersperse FileRange and ClearRange elements, without this deserializer if we received
+ * the following response the resulting ShareFileRangeList would only contain one FileRange element and one ClearRange
+ * element.
+ *
+ *
+ * {@code
+ *
+ *
+ *
+ * Start Byte
+ * End Byte
+ *
+ *
+ * Start Byte
+ * End Byte
+ *
+ *
+ * Start Byte
+ * End Byte
+ *
+ *
+ * }
+ *
+ *
+ * With the custom deserializer the response correctly returns two FileRange elements and one ClearRange element.
+ */
+final class ShareFileRangeListDeserializer extends JsonDeserializer {
+ @Override
+ public ShareFileRangeList deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
+ ArrayList pageRanges = new ArrayList<>();
+ ArrayList clearRanges = new ArrayList<>();
+
+ // Get the deserializer that handles PageRange.
+ JsonDeserializer pageRangeDeserializer =
+ ctxt.findRootValueDeserializer(ctxt.constructType(FileRange.class));
+
+ // Get the deserializer that handles ClearRange.
+ JsonDeserializer clearRangeDeserializer =
+ ctxt.findRootValueDeserializer(ctxt.constructType(ClearRange.class));
+
+ for (JsonToken currentToken = p.nextToken(); currentToken.id() != JsonTokenId.ID_END_OBJECT;
+ currentToken = p.nextToken()) {
+ // Get to the root element of the next item.
+ p.nextToken();
+
+ if (p.getCurrentName().equals("Range")) {
+ // Current token is the node that begins a FileRange object.
+ pageRanges.add((FileRange) pageRangeDeserializer.deserialize(p, ctxt));
+ } else if (p.getCurrentName().equals("ClearRange")) {
+ // Current token is the node that begins a ClearRange object.
+ clearRanges.add((ClearRange) clearRangeDeserializer.deserialize(p, ctxt));
+ }
+ }
+
+ return new ShareFileRangeList().setRanges(pageRanges).setClearRanges(clearRanges);
+ }
+}
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 38cb162e7920..935f2fe1e52e 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
@@ -31,6 +31,16 @@ import java.time.LocalDateTime
import java.time.OffsetDateTime
import java.time.ZoneOffset
+import static com.azure.storage.file.share.FileTestHelper.assertExceptionStatusCodeAndMessage
+import static com.azure.storage.file.share.FileTestHelper.assertResponseStatusCode
+import static com.azure.storage.file.share.FileTestHelper.compareFiles
+import static com.azure.storage.file.share.FileTestHelper.createClearRanges
+import static com.azure.storage.file.share.FileTestHelper.createFileRanges
+import static com.azure.storage.file.share.FileTestHelper.createRandomFileWithLength
+import static com.azure.storage.file.share.FileTestHelper.deleteFilesIfExists
+import static com.azure.storage.file.share.FileTestHelper.getRandomBuffer
+import static com.azure.storage.file.share.FileTestHelper.getRandomFile
+
class FileAPITests extends APISpec {
ShareFileClient primaryFileClient
ShareClient shareClient
@@ -53,7 +63,7 @@ class FileAPITests extends APISpec {
testMetadata = Collections.singletonMap("testmetadata", "value")
httpHeaders = new ShareFileHttpHeaders().setContentLanguage("en")
.setContentType("application/octet-stream")
- smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet.of(NtfsFileAttributes.NORMAL))
+ smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet. of(NtfsFileAttributes.NORMAL))
}
def "Get file URL"() {
@@ -112,12 +122,12 @@ class FileAPITests extends APISpec {
def "Create file"() {
expect:
- FileTestHelper.assertResponseStatusCode(primaryFileClient.createWithResponse(1024, null, null, null, null, null, null), 201)
+ assertResponseStatusCode(primaryFileClient.createWithResponse(1024, null, null, null, null, null, null), 201)
}
def "Create file 4TB"() {
expect:
- FileTestHelper.assertResponseStatusCode(primaryFileClient.createWithResponse(4 * Constants.TB, null, null, null, null, null, null), 201)
+ assertResponseStatusCode(primaryFileClient.createWithResponse(4 * Constants.TB, null, null, null, null, null, null), 201)
}
def "Create file error"() {
@@ -126,7 +136,7 @@ class FileAPITests extends APISpec {
then:
def e = thrown(ShareStorageException)
- FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
+ assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
}
def "Create file with args fpk"() {
@@ -139,7 +149,7 @@ class FileAPITests extends APISpec {
def resp = primaryFileClient.createWithResponse(1024, httpHeaders, smbProperties, null, testMetadata, null, null)
then:
- FileTestHelper.assertResponseStatusCode(resp, 201)
+ assertResponseStatusCode(resp, 201)
resp.getValue().getETag()
resp.getValue().getLastModified()
resp.getValue().getSmbProperties()
@@ -158,7 +168,7 @@ class FileAPITests extends APISpec {
.setFileLastWriteTime(getUTCNow())
def resp = primaryFileClient.createWithResponse(1024, httpHeaders, smbProperties, filePermission, testMetadata, null, null)
then:
- FileTestHelper.assertResponseStatusCode(resp, 201)
+ assertResponseStatusCode(resp, 201)
resp.getValue().getETag()
resp.getValue().getLastModified()
resp.getValue().getSmbProperties()
@@ -176,7 +186,7 @@ class FileAPITests extends APISpec {
primaryFileClient.createWithResponse(-1, null, null, null, testMetadata, null, null)
then:
def e = thrown(ShareStorageException)
- FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
+ assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
}
@Unroll
@@ -189,7 +199,7 @@ class FileAPITests extends APISpec {
where:
filePermissionKey | permission
"filePermissionKey" | filePermission
- null | new String(FileTestHelper.getRandomBuffer(9 * Constants.KB))
+ null | new String(getRandomBuffer(9 * Constants.KB))
}
def "Upload and download data"() {
@@ -203,9 +213,9 @@ class FileAPITests extends APISpec {
def headers = downloadResponse.getDeserializedHeaders()
then:
- FileTestHelper.assertResponseStatusCode(uploadResponse, 201)
- FileTestHelper.assertResponseStatusCode(downloadResponse, 200)
- headers.getContentLength() == dataLength
+ assertResponseStatusCode(uploadResponse, 201)
+ assertResponseStatusCode(downloadResponse, 200)
+ headers.getContentLength() == (long) dataLength
headers.getETag()
headers.getLastModified()
headers.getFilePermissionKey()
@@ -229,9 +239,9 @@ class FileAPITests extends APISpec {
def downloadResponse = primaryFileClient.downloadWithResponse(stream, new ShareFileRange(1, dataLength), true, null, null)
then:
- FileTestHelper.assertResponseStatusCode(uploadResponse, 201)
- FileTestHelper.assertResponseStatusCode(downloadResponse, 206)
- downloadResponse.getDeserializedHeaders().getContentLength() == dataLength
+ assertResponseStatusCode(uploadResponse, 201)
+ assertResponseStatusCode(downloadResponse, 206)
+ downloadResponse.getDeserializedHeaders().getContentLength() == (long) dataLength
data == stream.toByteArray()
}
@@ -247,9 +257,9 @@ class FileAPITests extends APISpec {
def downloadResponse = primaryFileClient.downloadWithResponse(stream, new ShareFileRange(fileSize - dataLength, fileSize), true, null, null)
then:
- FileTestHelper.assertResponseStatusCode(uploadResponse, 201)
- FileTestHelper.assertResponseStatusCode(downloadResponse, 206)
- downloadResponse.getDeserializedHeaders().getContentLength() == dataLength
+ assertResponseStatusCode(uploadResponse, 201)
+ assertResponseStatusCode(downloadResponse, 206)
+ downloadResponse.getDeserializedHeaders().getContentLength() == (long) dataLength
}
def "Upload data error"() {
@@ -258,10 +268,10 @@ class FileAPITests extends APISpec {
then:
def e = thrown(ShareStorageException)
- FileTestHelper.assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
+ assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
}
- def "Upload and clear range" () {
+ def "Upload and clear range"() {
given:
def fullInfoString = "please clear the range"
def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8))
@@ -279,7 +289,7 @@ class FileAPITests extends APISpec {
}
}
- def "Upload and clear range with args" () {
+ def "Upload and clear range with args"() {
given:
def fullInfoString = "please clear the range"
def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8))
@@ -297,7 +307,7 @@ class FileAPITests extends APISpec {
}
}
- def "Clear range error" () {
+ def "Clear range error"() {
given:
def fullInfoString = "please clear the range"
def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8))
@@ -309,10 +319,10 @@ class FileAPITests extends APISpec {
then:
def e = thrown(ShareStorageException)
- FileTestHelper.assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE)
+ assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE)
}
- def "Clear range error args" () {
+ def "Clear range error args"() {
given:
def fullInfoString = "please clear the range"
def fullInfoData = getInputStream(fullInfoString.getBytes(StandardCharsets.UTF_8))
@@ -324,7 +334,7 @@ class FileAPITests extends APISpec {
then:
def e = thrown(ShareStorageException)
- FileTestHelper.assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE)
+ assertExceptionStatusCodeAndMessage(e, 416, ShareErrorCode.INVALID_RANGE)
}
@Unroll
@@ -341,8 +351,8 @@ class FileAPITests extends APISpec {
where:
size | errMsg
- 6 | "more than"
- 8 | "less than"
+ 6 | "more than"
+ 8 | "less than"
}
def "Download data error"() {
@@ -351,7 +361,7 @@ class FileAPITests extends APISpec {
then:
def e = thrown(ShareStorageException)
- FileTestHelper.assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
+ assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
}
def "Upload file does not exist"() {
@@ -370,12 +380,13 @@ class FileAPITests extends APISpec {
ex.getCause() instanceof NoSuchFileException
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
/*
* Tests downloading a file using a default client that doesn't have a HttpClient passed to it.
*/
+
@Requires({ liveMode() })
@Unroll
def "Download file buffer copy"() {
@@ -387,7 +398,7 @@ class FileAPITests extends APISpec {
def fileClient = shareServiceClient.getShareClient(shareName)
.createFile(filePath, fileSize)
- def file = FileTestHelper.getRandomFile(fileSize)
+ def file = getRandomFile(fileSize)
fileClient.uploadFromFile(file.toPath().toString())
def outFile = new File(testResourceName.randomName(methodName, 60) + ".txt")
if (outFile.exists()) {
@@ -398,7 +409,7 @@ class FileAPITests extends APISpec {
fileClient.downloadToFile(outFile.toPath().toString())
then:
- FileTestHelper.compareFiles(file, outFile, 0, fileSize)
+ compareFiles(file, outFile, 0, fileSize)
cleanup:
shareServiceClient.deleteShare(shareName)
@@ -434,7 +445,7 @@ class FileAPITests extends APISpec {
ex.getCause() instanceof FileAlreadyExistsException
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "Upload and download to file does not exist"() {
@@ -458,7 +469,7 @@ class FileAPITests extends APISpec {
scanner.close()
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
@Unroll
@@ -487,14 +498,14 @@ class FileAPITests extends APISpec {
.buildFileClient()
client.create(1024)
- client.uploadRangeFromUrl(length, destinationOffset, sourceOffset, primaryFileClient.getFileUrl() +"?" + sasToken)
+ client.uploadRangeFromUrl(length, destinationOffset, sourceOffset, primaryFileClient.getFileUrl() + "?" + sasToken)
then:
def stream = new ByteArrayOutputStream()
client.download(stream)
def result = new String(stream.toByteArray())
- for(int i = 0; i < length; i++) {
+ for (int i = 0; i < length; i++) {
result.charAt(destinationOffset + i) == data.charAt(sourceOffset + i)
}
where:
@@ -514,8 +525,8 @@ class FileAPITests extends APISpec {
when:
SyncPoller poller = primaryFileClient.beginCopy(sourceURL,
- null,
- null)
+ null,
+ null)
def pollResponse = poller.poll()
@@ -566,13 +577,13 @@ class FileAPITests extends APISpec {
when:
SyncPoller poller = primaryFileClient.beginCopy("some url",
- testMetadata,
- null)
+ testMetadata,
+ null)
poller.waitForCompletion()
then:
def e = thrown(ShareStorageException)
- FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.INVALID_HEADER_VALUE)
+ assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.INVALID_HEADER_VALUE)
}
@Ignore
@@ -585,7 +596,7 @@ class FileAPITests extends APISpec {
primaryFileClient.createWithResponse(1024, null, null, null, null, null, null)
expect:
- FileTestHelper.assertResponseStatusCode(primaryFileClient.deleteWithResponse(null, null), 202)
+ assertResponseStatusCode(primaryFileClient.deleteWithResponse(null, null), 202)
}
def "Delete file error"() {
@@ -594,7 +605,7 @@ class FileAPITests extends APISpec {
then:
def e = thrown(ShareStorageException)
- FileTestHelper.assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
+ assertExceptionStatusCodeAndMessage(e, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
}
def "Get properties"() {
@@ -607,7 +618,7 @@ class FileAPITests extends APISpec {
def resp = primaryFileClient.getPropertiesWithResponse(null, null)
then:
- FileTestHelper.assertResponseStatusCode(resp, 200)
+ assertResponseStatusCode(resp, 200)
resp.getValue().getETag()
resp.getValue().getLastModified()
resp.getValue().getSmbProperties()
@@ -639,7 +650,7 @@ class FileAPITests extends APISpec {
def resp = primaryFileClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, null, null, null)
then:
- FileTestHelper.assertResponseStatusCode(resp, 200)
+ assertResponseStatusCode(resp, 200)
resp.getValue().getETag()
resp.getValue().getLastModified()
resp.getValue().getSmbProperties()
@@ -661,7 +672,7 @@ class FileAPITests extends APISpec {
def resp = primaryFileClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, filePermission, null, null)
then:
- FileTestHelper.assertResponseStatusCode(resp, 200)
+ assertResponseStatusCode(resp, 200)
resp.getValue().getETag()
resp.getValue().getLastModified()
resp.getValue().getSmbProperties()
@@ -681,7 +692,7 @@ class FileAPITests extends APISpec {
primaryFileClient.setPropertiesWithResponse(-1, null, null, null, null, null)
then:
def e = thrown(ShareStorageException)
- FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
+ assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
}
def "Set metadata"() {
@@ -696,7 +707,7 @@ class FileAPITests extends APISpec {
then:
testMetadata == getPropertiesBefore.getMetadata()
- FileTestHelper.assertResponseStatusCode(setPropertiesResponse, 200)
+ assertResponseStatusCode(setPropertiesResponse, 200)
updatedMetadata == getPropertiesAfter.getMetadata()
}
@@ -710,14 +721,14 @@ class FileAPITests extends APISpec {
then:
def e = thrown(ShareStorageException)
- FileTestHelper.assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.EMPTY_METADATA_KEY)
+ assertExceptionStatusCodeAndMessage(e, 400, ShareErrorCode.EMPTY_METADATA_KEY)
}
def "List ranges"() {
given:
def fileName = testResourceName.randomName("file", 60)
primaryFileClient.create(1024)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileClient.uploadFromFile(uploadFile)
expect:
@@ -727,14 +738,14 @@ class FileAPITests extends APISpec {
}
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "List ranges with range"() {
given:
def fileName = testResourceName.randomName("file", 60)
primaryFileClient.create(1024)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileClient.uploadFromFile(uploadFile)
expect:
@@ -744,14 +755,14 @@ class FileAPITests extends APISpec {
}
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "List ranges snapshot"() {
given:
def fileName = testResourceName.randomName("file", 60)
primaryFileClient.create(1024)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileClient.uploadFromFile(uploadFile)
def snapInfo = shareClient.createSnapshot()
@@ -767,14 +778,14 @@ class FileAPITests extends APISpec {
}
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "List ranges snapshot fail"() {
given:
def fileName = testResourceName.randomName("file", 60)
primaryFileClient.create(1024)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileClient.uploadFromFile(uploadFile)
primaryFileClient = fileBuilderHelper(interceptorManager, shareName, filePath)
@@ -791,38 +802,64 @@ class FileAPITests extends APISpec {
def e = thrown(ShareStorageException)
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
- @Requires( { playbackMode() } )
+ @Unroll
def "List ranges diff"() {
- given:
- primaryFileClient.create(1024)
- primaryFileClient.uploadWithResponse(new ByteArrayInputStream(FileTestHelper.getRandomBuffer(512)),512, 512, null, null)
- def snapInfo = shareClient.createSnapshot()
- primaryFileClient.uploadWithResponse(new ByteArrayInputStream(FileTestHelper.getRandomBuffer(512)),512, 0, null, null)
-
- primaryFileClient.clearRangeWithResponse(512, 512, null, null)
+ setup:
+ primaryFileClient.create(4 * Constants.MB)
+ primaryFileClient.upload(new ByteArrayInputStream(getRandomBuffer(4 * Constants.MB)), 4 * Constants.MB)
+ def snapshotId = primaryFileServiceClient.getShareClient(primaryFileClient.getShareName())
+ .createSnapshot()
+ .getSnapshot()
+
+ rangesToUpdate.forEach({
+ def size = it.getEnd() - it.getStart() + 1
+ primaryFileClient.uploadWithResponse(new ByteArrayInputStream(getRandomBuffer((int) size)), size,
+ it.getStart(), null, null)
+ })
+
+ rangesToClear.forEach({
+ def size = it.getEnd() - it.getStart() + 1
+ primaryFileClient.clearRangeWithResponse(size, it.getStart(), null, null)
+ })
when:
- def response = primaryFileClient.listRangesDiffWithResponse(new ShareFileListRangesDiffOptions(snapInfo.getSnapshot()).setRange(new ShareFileRange(0, 1024)), null, null)
+ def rangeDiff = primaryFileClient.listRangesDiff(snapshotId)
then:
- response.getValue().getRanges().size() == 1
- response.getValue().getRanges().get(0).getStart() == 0
- response.getValue().getRanges().get(0).getEnd() == 511
- response.getValue().getClearRanges().size() == 1
- response.getValue().getClearRanges().get(0).getStart() == 512
- response.getValue().getClearRanges().get(0).getEnd() == 1023
- validateBasicHeaders(response.getHeaders())
- Integer.parseInt(response.getHeaders().getValue("x-ms-content-length")) == 1024
+ rangeDiff.getRanges().size() == expectedRanges.size()
+ rangeDiff.getClearRanges().size() == expectedClearRanges.size()
+
+ for (def i = 0; i < expectedRanges.size(); i++) {
+ def actualRange = rangeDiff.getRanges().get(i)
+ def expectedRange = expectedRanges.get(i)
+ expectedRange.getStart() == actualRange.getStart()
+ expectedRange.getEnd() == actualRange.getEnd()
+ }
+
+ for (def i = 0; i < expectedClearRanges.size(); i++) {
+ def actualRange = rangeDiff.getClearRanges().get(i)
+ def expectedRange = expectedClearRanges.get(i)
+ expectedRange.getStart() == actualRange.getStart()
+ expectedRange.getEnd() == actualRange.getEnd()
+ }
+
+ where:
+ rangesToUpdate | rangesToClear | expectedRanges | expectedClearRanges
+ createFileRanges() | createFileRanges() | createFileRanges() | createClearRanges()
+ createFileRanges(0, 511) | createFileRanges() | createFileRanges(0, 511) | createClearRanges()
+ createFileRanges() | createFileRanges(0, 511) | createFileRanges() | createClearRanges(0, 511)
+ createFileRanges(0, 511) | createFileRanges(512, 1023) | createFileRanges(0, 511) | createClearRanges(512, 1023)
+ createFileRanges(0, 511, 1024, 1535) | createFileRanges(512, 1023, 1536, 2047) | createFileRanges(0, 511, 1024, 1535) | createClearRanges(512, 1023, 1536, 2047)
}
def "List ranges diff with range"() {
given:
def fileName = testResourceName.randomName("file", 60)
primaryFileClient.create(1024 + dataLength)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileClient.uploadFromFile(uploadFile)
def snapInfo = shareClient.createSnapshot()
@@ -837,15 +874,15 @@ class FileAPITests extends APISpec {
range.getEnd() == 1026
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
- @Requires( { playbackMode() } )
+ @Requires({ playbackMode() })
def "List ranges diff lease"() {
given:
def fileName = testResourceName.randomName("file", 60)
primaryFileClient.create(1024 + dataLength)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileClient.uploadFromFile(uploadFile)
def snapInfo = shareClient.createSnapshot()
@@ -861,14 +898,14 @@ class FileAPITests extends APISpec {
range.getEnd() == 1030
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "List ranges diff lease fail"() {
given:
def fileName = testResourceName.randomName("file", 60)
primaryFileClient.create(1024 + dataLength)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileClient.uploadFromFile(uploadFile)
def snapInfo = shareClient.createSnapshot()
@@ -882,15 +919,15 @@ class FileAPITests extends APISpec {
thrown(ShareStorageException)
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
- @Requires( { playbackMode() } )
+ @Requires({ playbackMode() })
def "List ranges diff fail"() {
given:
def fileName = testResourceName.randomName("file", 60)
primaryFileClient.create(1024)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileClient.uploadFromFile(uploadFile)
when:
@@ -900,7 +937,7 @@ class FileAPITests extends APISpec {
thrown(ShareStorageException)
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "List handles"() {
diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy
index c1c29ac8c2d8..df527fc925a3 100644
--- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy
+++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileAsyncAPITests.groovy
@@ -33,6 +33,8 @@ import java.time.LocalDateTime
import java.time.OffsetDateTime
import java.time.ZoneOffset
+import static com.azure.storage.file.share.FileTestHelper.*
+
class FileAsyncAPITests extends APISpec {
ShareFileAsyncClient primaryFileAsyncClient
ShareClient shareClient
@@ -52,7 +54,7 @@ class FileAsyncAPITests extends APISpec {
testMetadata = Collections.singletonMap("testmetadata", "value")
httpHeaders = new ShareFileHttpHeaders().setContentLanguage("en")
.setContentType("application/octet-stream")
- smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet.of(NtfsFileAttributes.NORMAL))
+ smbProperties = new FileSmbProperties().setNtfsFileAttributes(EnumSet. of(NtfsFileAttributes.NORMAL))
}
def "Get file URL"() {
@@ -71,7 +73,7 @@ class FileAsyncAPITests extends APISpec {
expect:
StepVerifier.create(primaryFileAsyncClient.createWithResponse(1024, null, null, null, null))
.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 201)
+ assert assertResponseStatusCode(it, 201)
}.verifyComplete()
}
@@ -81,7 +83,7 @@ class FileAsyncAPITests extends APISpec {
then:
createFileErrorVerifier.verifyErrorSatisfies {
- assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
+ assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
}
}
@@ -95,7 +97,7 @@ class FileAsyncAPITests extends APISpec {
expect:
StepVerifier.create(primaryFileAsyncClient.createWithResponse(1024, httpHeaders, smbProperties, null, testMetadata))
.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 201)
+ assert assertResponseStatusCode(it, 201)
assert it.getValue().getLastModified()
assert it.getValue().getSmbProperties()
assert it.getValue().getSmbProperties().getFilePermissionKey()
@@ -116,7 +118,7 @@ class FileAsyncAPITests extends APISpec {
expect:
StepVerifier.create(primaryFileAsyncClient.createWithResponse(1024, httpHeaders, smbProperties, filePermission, testMetadata))
.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 201)
+ assert assertResponseStatusCode(it, 201)
assert it.getValue().getLastModified()
assert it.getValue().getSmbProperties()
assert it.getValue().getSmbProperties().getFilePermissionKey()
@@ -135,7 +137,7 @@ class FileAsyncAPITests extends APISpec {
then:
createFileErrorVerifier.verifyErrorSatisfies {
- assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
+ assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
}
}
@@ -168,6 +170,7 @@ class FileAsyncAPITests extends APISpec {
/*
* Tests downloading a file using a default client that doesn't have a HttpClient passed to it.
*/
+
@Requires({ liveMode() })
@Unroll
def "Download file buffer copy"() {
@@ -179,7 +182,7 @@ class FileAsyncAPITests extends APISpec {
def fileClient = shareServiceAsyncClient.getShareAsyncClient(shareName)
.createFile(filePath, fileSize).block()
- def file = FileTestHelper.getRandomFile(fileSize)
+ def file = getRandomFile(fileSize)
fileClient.uploadFromFile(file.toPath().toString()).block()
def outFile = new File(testResourceName.randomName(methodName, 60) + ".txt")
if (outFile.exists()) {
@@ -190,7 +193,7 @@ class FileAsyncAPITests extends APISpec {
fileClient.downloadToFile(outFile.toPath().toString()).block()
then:
- FileTestHelper.compareFiles(file, outFile, 0, fileSize)
+ compareFiles(file, outFile, 0, fileSize)
cleanup:
shareServiceAsyncClient.deleteShare(shareName).block()
@@ -216,11 +219,11 @@ class FileAsyncAPITests extends APISpec {
then:
uploadVerifier.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 201)
+ assert assertResponseStatusCode(it, 201)
}.verifyComplete()
downloadVerifier.assertNext({ response ->
- assert FileTestHelper.assertResponseStatusCode(response, 200)
+ assert assertResponseStatusCode(response, 200)
def headers = response.getDeserializedHeaders()
assert headers.getContentLength() == defaultDataLength
assert headers.getETag()
@@ -252,14 +255,14 @@ class FileAsyncAPITests extends APISpec {
then:
uploadVerifier.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 201)
+ assert assertResponseStatusCode(it, 201)
}.verifyComplete()
downloadVerifier.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 206)
+ assert assertResponseStatusCode(it, 206)
assert it.getDeserializedHeaders().getContentLength() == defaultDataLength
FluxUtil.collectBytesInByteBufferStream(it.getValue())
- .flatMap({ data -> assert data == defaultData.array()})
+ .flatMap({ data -> assert data == defaultData.array() })
}.verifyComplete()
cleanup:
@@ -272,7 +275,7 @@ class FileAsyncAPITests extends APISpec {
then:
updateDataErrorVerifier.verifyErrorSatisfies {
- assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
+ assert assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
}
cleanup:
@@ -335,7 +338,7 @@ class FileAsyncAPITests extends APISpec {
then:
downloadDataErrorVerifier.verifyErrorSatisfies({
- assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
+ assert assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
})
}
@@ -376,7 +379,7 @@ class FileAsyncAPITests extends APISpec {
then:
clearRangeVerifier.assertNext {
- FileTestHelper.assertResponseStatusCode(it, 201)
+ assertResponseStatusCode(it, 201)
}.verifyComplete()
downloadResponseVerifier.assertNext {
@@ -402,7 +405,7 @@ class FileAsyncAPITests extends APISpec {
then:
clearRangeVerifier.assertNext {
- FileTestHelper.assertResponseStatusCode(it, 201)
+ assertResponseStatusCode(it, 201)
}.verifyComplete()
downloadResponseVerifier.assertNext {
@@ -430,7 +433,7 @@ class FileAsyncAPITests extends APISpec {
then:
clearRangeErrorVerifier.verifyErrorSatisfies {
- FileTestHelper.assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE)
+ assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE)
}
}
@@ -446,7 +449,7 @@ class FileAsyncAPITests extends APISpec {
then:
clearRangeErrorVerifier.verifyErrorSatisfies {
- FileTestHelper.assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE)
+ assertExceptionStatusCodeAndMessage(it, 416, ShareErrorCode.INVALID_RANGE)
}
cleanup:
@@ -492,7 +495,7 @@ class FileAsyncAPITests extends APISpec {
uploadFromFileErrorVerifier.verifyErrorSatisfies({ it instanceof NoSuchFileException })
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "Upload and download file exists"() {
@@ -516,7 +519,7 @@ class FileAsyncAPITests extends APISpec {
downloadToFileErrorVerifier.verifyErrorSatisfies({ it instanceof FileAlreadyExistsException })
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "Upload and download to file does not exist"() {
@@ -543,7 +546,7 @@ class FileAsyncAPITests extends APISpec {
scanner.close()
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "Upload from file lease"() {
@@ -551,7 +554,7 @@ class FileAsyncAPITests extends APISpec {
primaryFileAsyncClient.create(1024).block()
def leaseId = createLeaseClient(primaryFileAsyncClient).acquireLease().block()
def fileName = testResourceName.randomName("file", 60)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
when:
def verifier = StepVerifier.create(primaryFileAsyncClient.uploadFromFile(uploadFile, new ShareRequestConditions().setLeaseId(leaseId)))
@@ -560,7 +563,7 @@ class FileAsyncAPITests extends APISpec {
verifier.verifyComplete()
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "Upload from file lease fail"() {
@@ -568,7 +571,7 @@ class FileAsyncAPITests extends APISpec {
primaryFileAsyncClient.create(defaultDataLength).block()
createLeaseClient(primaryFileAsyncClient).acquireLease().block()
def fileName = testResourceName.randomName("file", 60)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
when:
@@ -579,7 +582,7 @@ class FileAsyncAPITests extends APISpec {
verifier.verifyError(ShareStorageException)
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "Download to file lease"() {
@@ -598,7 +601,7 @@ class FileAsyncAPITests extends APISpec {
verifier.verifyComplete()
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "Download to file lease fail"() {
@@ -616,7 +619,7 @@ class FileAsyncAPITests extends APISpec {
verifier.verifyError(ShareStorageException)
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "Upload range from URL"() {
@@ -688,7 +691,7 @@ class FileAsyncAPITests extends APISpec {
verifier.verifyComplete()
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "Upload range from URL lease fail"() {
@@ -722,7 +725,7 @@ class FileAsyncAPITests extends APISpec {
verifier.verifyError(ShareStorageException)
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "Start copy"() {
@@ -846,7 +849,7 @@ class FileAsyncAPITests extends APISpec {
expect:
StepVerifier.create(primaryFileAsyncClient.deleteWithResponse())
.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 202)
+ assert assertResponseStatusCode(it, 202)
}.verifyComplete()
}
@@ -856,7 +859,7 @@ class FileAsyncAPITests extends APISpec {
then:
deleteFileErrorVerifier.verifyErrorSatisfies {
- assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
+ assert assertExceptionStatusCodeAndMessage(it, 404, ShareErrorCode.RESOURCE_NOT_FOUND)
}
}
@@ -868,7 +871,7 @@ class FileAsyncAPITests extends APISpec {
expect:
StepVerifier.create(primaryFileAsyncClient.deleteWithResponse(new ShareRequestConditions().setLeaseId(leaseId)))
.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 202)
+ assert assertResponseStatusCode(it, 202)
}.verifyComplete()
}
@@ -891,7 +894,7 @@ class FileAsyncAPITests extends APISpec {
then:
getPropertiesVerifier.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 200)
+ assert assertResponseStatusCode(it, 200)
assert it.getValue().getETag()
assert it.getValue().getLastModified()
assert it.getValue().getLastModified()
@@ -952,7 +955,7 @@ class FileAsyncAPITests extends APISpec {
expect:
StepVerifier.create(primaryFileAsyncClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, null))
.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 200)
+ assert assertResponseStatusCode(it, 200)
assert it.getValue().getSmbProperties()
assert it.getValue().getSmbProperties().getFilePermissionKey()
assert it.getValue().getSmbProperties().getNtfsFileAttributes()
@@ -973,7 +976,7 @@ class FileAsyncAPITests extends APISpec {
expect:
StepVerifier.create(primaryFileAsyncClient.setPropertiesWithResponse(512, httpHeaders, smbProperties, filePermission))
.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 200)
+ assert assertResponseStatusCode(it, 200)
assert it.getValue().getSmbProperties()
assert it.getValue().getSmbProperties().getFilePermissionKey()
assert it.getValue().getSmbProperties().getNtfsFileAttributes()
@@ -1015,7 +1018,7 @@ class FileAsyncAPITests extends APISpec {
then:
setHttpHeaderVerifier.verifyErrorSatisfies {
- assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
+ assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.OUT_OF_RANGE_INPUT)
}
}
@@ -1034,7 +1037,7 @@ class FileAsyncAPITests extends APISpec {
assert testMetadata == it.getMetadata()
}.verifyComplete()
setPropertiesVerifier.assertNext {
- assert FileTestHelper.assertResponseStatusCode(it, 200)
+ assert assertResponseStatusCode(it, 200)
}.verifyComplete()
getPropertiesAfterVerifier.assertNext {
assert updatedMetadata == it.getMetadata()
@@ -1051,7 +1054,7 @@ class FileAsyncAPITests extends APISpec {
then:
setMetadataErrorVerifier.verifyErrorSatisfies {
- assert FileTestHelper.assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.EMPTY_METADATA_KEY)
+ assert assertExceptionStatusCodeAndMessage(it, 400, ShareErrorCode.EMPTY_METADATA_KEY)
}
}
@@ -1087,7 +1090,7 @@ class FileAsyncAPITests extends APISpec {
given:
primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block()
def fileName = testResourceName.randomName("file", 60)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileAsyncClient.uploadFromFile(uploadFile).block()
expect:
@@ -1098,14 +1101,14 @@ class FileAsyncAPITests extends APISpec {
}.verifyComplete()
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "List ranges with range"() {
given:
primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block()
def fileName = testResourceName.randomName("file", 60)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileAsyncClient.uploadFromFile(uploadFile).block()
expect:
@@ -1116,14 +1119,14 @@ class FileAsyncAPITests extends APISpec {
}.verifyComplete()
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "List ranges lease"() {
given:
primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block()
def fileName = testResourceName.randomName("file", 60)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileAsyncClient.uploadFromFile(uploadFile).block()
def leaseId = createLeaseClient(primaryFileAsyncClient).acquireLease().block()
@@ -1132,14 +1135,14 @@ class FileAsyncAPITests extends APISpec {
.expectNextCount(1).verifyComplete()
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
}
def "List ranges lease fail"() {
given:
primaryFileAsyncClient.createWithResponse(1024, null, null, null, null).block()
def fileName = testResourceName.randomName("file", 60)
- def uploadFile = FileTestHelper.createRandomFileWithLength(1024, testFolder, fileName)
+ def uploadFile = createRandomFileWithLength(1024, testFolder, fileName)
primaryFileAsyncClient.uploadFromFile(uploadFile).block()
createLeaseClient(primaryFileAsyncClient).acquireLease().block()
@@ -1148,7 +1151,60 @@ class FileAsyncAPITests extends APISpec {
.verifyError(ShareStorageException)
cleanup:
- FileTestHelper.deleteFilesIfExists(testFolder.getPath())
+ deleteFilesIfExists(testFolder.getPath())
+ }
+
+ @Unroll
+ def "List ranges diff"() {
+ setup:
+ def snapshotId = primaryFileAsyncClient.create(4 * Constants.MB)
+ .then(primaryFileAsyncClient.upload(Flux.just(getRandomByteBuffer(4 * Constants.MB)), 4 * Constants.MB))
+ .then(primaryFileServiceAsyncClient.getShareAsyncClient(primaryFileAsyncClient.getShareName())
+ .createSnapshot()
+ .map({ it.getSnapshot() }))
+ .block()
+
+ Flux.fromIterable(rangesToUpdate)
+ .flatMap({
+ def size = it.getEnd() - it.getStart() + 1
+ primaryFileAsyncClient.uploadWithResponse(Flux.just(getRandomByteBuffer((int) size)), size, it.getStart())
+ }).blockLast()
+
+ Flux.fromIterable(rangesToClear)
+ .flatMap({
+ primaryFileAsyncClient.clearRangeWithResponse(it.getEnd() - it.getStart() + 1, it.getStart())
+ })
+ .blockLast()
+
+ expect:
+ StepVerifier.create(primaryFileAsyncClient.listRangesDiff(snapshotId))
+ .assertNext({
+ it.getRanges().size() == expectedRanges.size()
+ it.getClearRanges().size() == expectedClearRanges.size()
+
+ for (def i = 0; i < expectedRanges.size(); i++) {
+ def actualRange = it.getRanges().get(i)
+ def expectedRange = expectedRanges.get(i)
+ expectedRange.getStart() == actualRange.getStart()
+ expectedRange.getEnd() == actualRange.getEnd()
+ }
+
+ for (def i = 0; i < expectedClearRanges.size(); i++) {
+ def actualRange = it.getClearRanges().get(i)
+ def expectedRange = expectedClearRanges.get(i)
+ expectedRange.getStart() == actualRange.getStart()
+ expectedRange.getEnd() == actualRange.getEnd()
+ }
+ })
+ .verifyComplete()
+
+ where:
+ rangesToUpdate | rangesToClear | expectedRanges | expectedClearRanges
+ createFileRanges() | createFileRanges() | createFileRanges() | createClearRanges()
+ createFileRanges(0, 511) | createFileRanges() | createFileRanges(0, 511) | createClearRanges()
+ createFileRanges() | createFileRanges(0, 511) | createFileRanges() | createClearRanges(0, 511)
+ createFileRanges(0, 511) | createFileRanges(512, 1023) | createFileRanges(0, 511) | createClearRanges(512, 1023)
+ createFileRanges(0, 511, 1024, 1535) | createFileRanges(512, 1023, 1536, 2047) | createFileRanges(0, 511, 1024, 1535) | createClearRanges(512, 1023, 1536, 2047)
}
def "List handles"() {
@@ -1187,7 +1243,7 @@ class FileAsyncAPITests extends APISpec {
expect:
StepVerifier.create(primaryFileAsyncClient.forceCloseHandle("invalidHandleId"))
- .verifyErrorSatisfies({ it instanceof ShareStorageException })
+ .verifyErrorSatisfies({ it instanceof ShareStorageException })
}
def "Force close all handles min"() {
diff --git a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy
index db4f916cabce..a2cb7721d1ab 100644
--- a/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy
+++ b/sdk/storage/azure-storage-file-share/src/test/java/com/azure/storage/file/share/FileTestHelper.groovy
@@ -4,8 +4,11 @@
package com.azure.storage.file.share
import com.azure.core.http.rest.Response
+import com.azure.core.util.CoreUtils
import com.azure.core.util.logging.ClientLogger
import com.azure.storage.common.implementation.Constants
+import com.azure.storage.file.share.models.ClearRange
+import com.azure.storage.file.share.models.FileRange
import com.azure.storage.file.share.models.ShareCorsRule
import com.azure.storage.file.share.models.ShareErrorCode
import com.azure.storage.file.share.models.ShareItem
@@ -14,6 +17,7 @@ import com.azure.storage.file.share.models.ShareRetentionPolicy
import com.azure.storage.file.share.models.ShareServiceProperties
import com.azure.storage.file.share.models.ShareStorageException
+import java.nio.ByteBuffer
import java.nio.file.Files
import java.nio.file.Path
@@ -178,6 +182,10 @@ class FileTestHelper {
return file
}
+ static ByteBuffer getRandomByteBuffer(int length) {
+ return ByteBuffer.wrap(getRandomBuffer(length))
+ }
+
// TODO : Move this into a common package test class?
static byte[] getRandomBuffer(int length) {
final Random randGenerator = new Random()
@@ -219,4 +227,32 @@ class FileTestHelper {
stream2.close()
}
}
+
+ static def createFileRanges(long ... offsets) {
+ def fileRanges = [] as List
+
+ if (CoreUtils.isNullOrEmpty(offsets)) {
+ return fileRanges
+ }
+
+ for (def i = 0; i < offsets.length / 2; i++) {
+ fileRanges.add(new FileRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1]))
+ }
+
+ return fileRanges
+ }
+
+ static def createClearRanges(long ... offsets) {
+ def clearRanges = [] as List
+
+ if (CoreUtils.isNullOrEmpty(offsets)) {
+ return clearRanges
+ }
+
+ for (def i = 0; i < offsets.length / 2; i++) {
+ clearRanges.add(new ClearRange().setStart(offsets[i * 2]).setEnd(offsets[i * 2 + 1]))
+ }
+
+ return clearRanges
+ }
}
diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff0.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff0.json
new file mode 100644
index 000000000000..2a9b960ce33e
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff0.json
@@ -0,0 +1,124 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044?restype=share",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "e792dd6c-e987-4c92-8ab9-2c35df85a857"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778ACEBEA2F0",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:33 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd11-601a-0004-1c73-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:35:32 GMT",
+ "x-ms-client-request-id" : "e792dd6c-e987-4c92-8ab9-2c35df85a857"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044/fileapitestslistrangesdiff0917599b270cd1e34646",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "a9a5800f-76fc-42f1-8aca-78e61abb4e63"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216",
+ "x-ms-file-id" : "13835128424026341376",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-file-creation-time" : "2020-10-23T19:35:33.4561852Z",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:33 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:35:32 GMT",
+ "ETag" : "0x8D8778ACEF94C3C",
+ "x-ms-file-attributes" : "Archive",
+ "x-ms-file-change-time" : "2020-10-23T19:35:33.4561852Z",
+ "x-ms-file-parent-id" : "0",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "0b80fd14-601a-0004-1d73-a9c5f4000000",
+ "x-ms-client-request-id" : "a9a5800f-76fc-42f1-8aca-78e61abb4e63",
+ "x-ms-file-last-write-time" : "2020-10-23T19:35:33.4561852Z"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044/fileapitestslistrangesdiff0917599b270cd1e34646?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "fff0abc7-171e-4f96-916c-a8c74df3020f",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AD2B9FF6A",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:39 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd16-601a-0004-1e73-a9c5f4000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:35:39 GMT",
+ "x-ms-client-request-id" : "fff0abc7-171e-4f96-916c-a8c74df3020f",
+ "Content-MD5" : "MgQDh41UFaq3Gg+VfMUSbQ=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044?restype=share&comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "7d93098d-f6ad-4720-9977-3dc96a40d2d6"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T19:35:40.0000000Z",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778ACEBEA2F0",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:33 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd1f-601a-0004-2173-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:35:41 GMT",
+ "x-ms-client-request-id" : "7d93098d-f6ad-4720-9977-3dc96a40d2d6"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff0971801727945a710044/fileapitestslistrangesdiff0917599b270cd1e34646?prevsharesnapshot=2020-10-23T19%3A35%3A40.0000000Z&comp=rangelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "8b8f04f7-a5ce-4724-bcfc-a2146462b5f0"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-length" : "4194304",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:39 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 19:35:42 GMT",
+ "ETag" : "0x8D8778AD2B9FF6A",
+ "x-ms-request-id" : "0b80fd23-601a-0004-2373-a9c5f4000000",
+ "Body" : " ",
+ "x-ms-client-request-id" : "8b8f04f7-a5ce-4724-bcfc-a2146462b5f0",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "fileapitestslistrangesdiff0971801727945a710044", "fileapitestslistrangesdiff0917599b270cd1e34646" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff1.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff1.json
new file mode 100644
index 000000000000..4ad6595fe2f0
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff1.json
@@ -0,0 +1,148 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42?restype=share",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "de075f54-5bc7-4fa6-bb3a-2bc228ce2464"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AD4C608C0",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:43 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd25-601a-0004-2473-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:35:42 GMT",
+ "x-ms-client-request-id" : "de075f54-5bc7-4fa6-bb3a-2bc228ce2464"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "24c4bc70-6df9-4b72-827f-f6a9fcb5b92c"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216",
+ "x-ms-file-id" : "13835128424026341376",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-file-creation-time" : "2020-10-23T19:35:43.2515840Z",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:43 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:35:42 GMT",
+ "ETag" : "0x8D8778AD4CFF500",
+ "x-ms-file-attributes" : "Archive",
+ "x-ms-file-change-time" : "2020-10-23T19:35:43.2515840Z",
+ "x-ms-file-parent-id" : "0",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "0b80fd27-601a-0004-2573-a9c5f4000000",
+ "x-ms-client-request-id" : "24c4bc70-6df9-4b72-827f-f6a9fcb5b92c",
+ "x-ms-file-last-write-time" : "2020-10-23T19:35:43.2515840Z"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "c14e3f84-2e5b-4e92-8c2b-43380fbd0c37",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AD85193E9",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd28-601a-0004-2673-a9c5f4000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:35:48 GMT",
+ "x-ms-client-request-id" : "c14e3f84-2e5b-4e92-8c2b-43380fbd0c37",
+ "Content-MD5" : "2it+8RrlSjbf0Nji0z53pA=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42?restype=share&comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "aff54343-7cf5-418c-80dd-ef48ed6b54cc"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T19:35:49.0000000Z",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AD4C608C0",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:43 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd35-601a-0004-2973-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:35:48 GMT",
+ "x-ms-client-request-id" : "aff54343-7cf5-418c-80dd-ef48ed6b54cc"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "04eafe15-8807-4305-ab3a-7526ed405c67",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AD86807A3",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd38-601a-0004-2a73-a9c5f4000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:35:48 GMT",
+ "x-ms-client-request-id" : "04eafe15-8807-4305-ab3a-7526ed405c67",
+ "Content-MD5" : "RykPAEIXETChfv9QuDbC+w=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff1319141ec76abaf1be42/fileapitestslistrangesdiff117588ed300b26df5b41?prevsharesnapshot=2020-10-23T19%3A35%3A49.0000000Z&comp=rangelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "d3918e72-cd22-4d4d-b27d-0e02ff3a0839"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-length" : "4194304",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 19:35:48 GMT",
+ "ETag" : "0x8D8778AD86807A3",
+ "x-ms-request-id" : "0b80fd39-601a-0004-2b73-a9c5f4000000",
+ "Body" : "0 511 ",
+ "x-ms-client-request-id" : "d3918e72-cd22-4d4d-b27d-0e02ff3a0839",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "fileapitestslistrangesdiff1319141ec76abaf1be42", "fileapitestslistrangesdiff117588ed300b26df5b41" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff2.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff2.json
new file mode 100644
index 000000000000..7d794c632bd9
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff2.json
@@ -0,0 +1,145 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046?restype=share",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "fc0d2430-55b1-45ab-83d8-7eb615cbec4e"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AD888BB85",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd3b-601a-0004-2c73-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:35:48 GMT",
+ "x-ms-client-request-id" : "fc0d2430-55b1-45ab-83d8-7eb615cbec4e"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "787ce6e1-09cc-411b-affc-7ec6023d4de8"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216",
+ "x-ms-file-id" : "13835128424026341376",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-file-creation-time" : "2020-10-23T19:35:49.5606402Z",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:35:48 GMT",
+ "ETag" : "0x8D8778AD892A482",
+ "x-ms-file-attributes" : "Archive",
+ "x-ms-file-change-time" : "2020-10-23T19:35:49.5606402Z",
+ "x-ms-file-parent-id" : "0",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "0b80fd3d-601a-0004-2d73-a9c5f4000000",
+ "x-ms-client-request-id" : "787ce6e1-09cc-411b-affc-7ec6023d4de8",
+ "x-ms-file-last-write-time" : "2020-10-23T19:35:49.5606402Z"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "e981af9c-88a9-41dc-a567-6d95a0d9f832",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778ADC1358D1",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd3e-601a-0004-2e73-a9c5f4000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:35:54 GMT",
+ "x-ms-client-request-id" : "e981af9c-88a9-41dc-a567-6d95a0d9f832",
+ "Content-MD5" : "Q2Vj31zCIHQI23xIHDX31g=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046?restype=share&comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "a0e97407-e7f1-47f2-b9e0-a51aa0a4b0b1"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T19:35:55.0000000Z",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AD888BB85",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:49 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd46-601a-0004-3073-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:35:54 GMT",
+ "x-ms-client-request-id" : "a0e97407-e7f1-47f2-b9e0-a51aa0a4b0b1"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "13312b50-cc36-455b-840b-8a8158780a6e"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778ADC32F687",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd48-601a-0004-3273-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:35:54 GMT",
+ "x-ms-client-request-id" : "13312b50-cc36-455b-840b-8a8158780a6e"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff2222061495944aac5046/fileapitestslistrangesdiff208495e147e9cf965f43?prevsharesnapshot=2020-10-23T19%3A35%3A55.0000000Z&comp=rangelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "3ef484e4-e96a-4ff4-ba44-44bd5dda04d0"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-length" : "4194304",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 19:35:54 GMT",
+ "ETag" : "0x8D8778ADC32F687",
+ "x-ms-request-id" : "0b80fd49-601a-0004-3373-a9c5f4000000",
+ "Body" : "0 511 ",
+ "x-ms-client-request-id" : "3ef484e4-e96a-4ff4-ba44-44bd5dda04d0",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "fileapitestslistrangesdiff2222061495944aac5046", "fileapitestslistrangesdiff208495e147e9cf965f43" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff3.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff3.json
new file mode 100644
index 000000000000..f2eee160fc07
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff3.json
@@ -0,0 +1,169 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841?restype=share",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "d2901544-75a0-44ac-a773-9c5bf9d83790"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778ADC52C39A",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd4b-601a-0004-3473-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:35:55 GMT",
+ "x-ms-client-request-id" : "d2901544-75a0-44ac-a773-9c5bf9d83790"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "7a7a6d53-1c5e-45d6-9e72-494488834d80"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216",
+ "x-ms-file-id" : "13835128424026341376",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-file-creation-time" : "2020-10-23T19:35:55.9107350Z",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:35:55 GMT",
+ "ETag" : "0x8D8778ADC5B9716",
+ "x-ms-file-attributes" : "Archive",
+ "x-ms-file-change-time" : "2020-10-23T19:35:55.9107350Z",
+ "x-ms-file-parent-id" : "0",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "0b80fd4d-601a-0004-3573-a9c5f4000000",
+ "x-ms-client-request-id" : "7a7a6d53-1c5e-45d6-9e72-494488834d80",
+ "x-ms-file-last-write-time" : "2020-10-23T19:35:55.9107350Z"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "a30d4c60-9504-48c3-b1d7-c14455bec7b2",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778ADFD2D337",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd4f-601a-0004-3773-a9c5f4000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:36:01 GMT",
+ "x-ms-client-request-id" : "a30d4c60-9504-48c3-b1d7-c14455bec7b2",
+ "Content-MD5" : "ZwbgIHaMJ41wNdywuwKuEA=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841?restype=share&comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "334f1d3b-c2a1-48e9-9481-176799ab96ad"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T19:36:01.0000000Z",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778ADC52C39A",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:35:55 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd5a-601a-0004-3a73-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:36:01 GMT",
+ "x-ms-client-request-id" : "334f1d3b-c2a1-48e9-9481-176799ab96ad"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "86f54045-0990-4e52-a633-306d33c7398b",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778ADFF1381B",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd5b-601a-0004-3b73-a9c5f4000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:36:01 GMT",
+ "x-ms-client-request-id" : "86f54045-0990-4e52-a633-306d33c7398b",
+ "Content-MD5" : "M8TGtFtK+E9gEf7aAk0TeA=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "7a273d3f-8de4-4561-aafd-40cbaecef67e"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778ADFF97786",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd5d-601a-0004-3c73-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:36:01 GMT",
+ "x-ms-client-request-id" : "7a273d3f-8de4-4561-aafd-40cbaecef67e"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff3566829989544019f841/fileapitestslistrangesdiff3860919fba80a59d1941?prevsharesnapshot=2020-10-23T19%3A36%3A01.0000000Z&comp=rangelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "2f7e27fd-e9dc-42f8-8b26-69a0ed196df8"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-length" : "4194304",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:01 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 19:36:01 GMT",
+ "ETag" : "0x8D8778ADFF97786",
+ "x-ms-request-id" : "0b80fd5e-601a-0004-3d73-a9c5f4000000",
+ "Body" : "0 511 512 1023 ",
+ "x-ms-client-request-id" : "2f7e27fd-e9dc-42f8-8b26-69a0ed196df8",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "fileapitestslistrangesdiff3566829989544019f841", "fileapitestslistrangesdiff3860919fba80a59d1941" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff4.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff4.json
new file mode 100644
index 000000000000..7e3589c88825
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAPITestsListRangesDiff4.json
@@ -0,0 +1,214 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d?restype=share",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "95a30f0c-ffe4-4e26-8db4-1bec196de3eb"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AE01772F0",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:02 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd60-601a-0004-3e73-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:36:01 GMT",
+ "x-ms-client-request-id" : "95a30f0c-ffe4-4e26-8db4-1bec196de3eb"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "45574bf2-bf18-41eb-b26a-6e5dc8626eaf"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216",
+ "x-ms-file-id" : "13835128424026341376",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-file-creation-time" : "2020-10-23T19:36:02.2688384Z",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:02 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:36:01 GMT",
+ "ETag" : "0x8D8778AE025C280",
+ "x-ms-file-attributes" : "Archive",
+ "x-ms-file-change-time" : "2020-10-23T19:36:02.2688384Z",
+ "x-ms-file-parent-id" : "0",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "0b80fd62-601a-0004-3f73-a9c5f4000000",
+ "x-ms-client-request-id" : "45574bf2-bf18-41eb-b26a-6e5dc8626eaf",
+ "x-ms-file-last-write-time" : "2020-10-23T19:36:02.2688384Z"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "95109ad8-1c78-4d55-9755-f29e613ddfae",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AE390C698",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd63-601a-0004-4073-a9c5f4000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:36:07 GMT",
+ "x-ms-client-request-id" : "95109ad8-1c78-4d55-9755-f29e613ddfae",
+ "Content-MD5" : "fn0MIQfr1C2U60ck5C1Fkg=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d?restype=share&comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "0fb44088-dc97-4ee8-897b-1481bf3824b7"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T19:36:08.0000000Z",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AE01772F0",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:02 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd6c-601a-0004-4373-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:36:07 GMT",
+ "x-ms-client-request-id" : "0fb44088-dc97-4ee8-897b-1481bf3824b7"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "1114d039-08a9-4928-9397-3b14d67090b6",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AE3AA6F6E",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd6d-601a-0004-4473-a9c5f4000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:36:07 GMT",
+ "x-ms-client-request-id" : "1114d039-08a9-4928-9397-3b14d67090b6",
+ "Content-MD5" : "vz7foak6A9Pwv0HjmPKA4w=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "0a719f51-38a2-4518-ba0b-275cd18b8eea",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AE3B17603",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd6e-601a-0004-4573-a9c5f4000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:36:07 GMT",
+ "x-ms-client-request-id" : "0a719f51-38a2-4518-ba0b-275cd18b8eea",
+ "Content-MD5" : "psgyztntF/eWt6iDy2Cgbw=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "ed7ac37b-a3f6-4bcd-92c6-29a01cf10961"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AE3B98E52",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd6f-601a-0004-4673-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:36:07 GMT",
+ "x-ms-client-request-id" : "ed7ac37b-a3f6-4bcd-92c6-29a01cf10961"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "ba648583-dcec-4f50-a346-3767c8d49f73"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778AE3C094E7",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "0b80fd70-601a-0004-4773-a9c5f4000000",
+ "Date" : "Fri, 23 Oct 2020 19:36:07 GMT",
+ "x-ms-client-request-id" : "ba648583-dcec-4f50-a346-3767c8d49f73"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileapitestslistrangesdiff44520981b52588f8394d/fileapitestslistrangesdiff43708734f80127cef246?prevsharesnapshot=2020-10-23T19%3A36%3A08.0000000Z&comp=rangelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "3b8f9dd4-6522-4776-8516-e799d6fe1728"
+ },
+ "Response" : {
+ "Transfer-Encoding" : "chunked",
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-length" : "4194304",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:36:08 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 19:36:07 GMT",
+ "ETag" : "0x8D8778AE3C094E7",
+ "x-ms-request-id" : "0b80fd71-601a-0004-4873-a9c5f4000000",
+ "Body" : "0 511 512 1023 1024 1535 1536 2047 ",
+ "x-ms-client-request-id" : "3b8f9dd4-6522-4776-8516-e799d6fe1728",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "fileapitestslistrangesdiff44520981b52588f8394d", "fileapitestslistrangesdiff43708734f80127cef246" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff0.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff0.json
new file mode 100644
index 000000000000..6983442e406f
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff0.json
@@ -0,0 +1,124 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c?restype=share",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "48d4dccc-5e16-44e4-b2f9-bccba2ee4107"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D877895FA5A2FA",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:17 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d814-f01a-0023-2372-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:16 GMT",
+ "x-ms-client-request-id" : "48d4dccc-5e16-44e4-b2f9-bccba2ee4107"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c/fileasyncapitestslistrangesdiff0855387618dad0f0e",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "e4356993-57c0-41f4-bc96-41198da234a1"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216",
+ "x-ms-file-id" : "13835128424026341376",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-file-creation-time" : "2020-10-23T19:25:17.8266993Z",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:17 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:17 GMT",
+ "ETag" : "0x8D877896007B171",
+ "x-ms-file-attributes" : "Archive",
+ "x-ms-file-change-time" : "2020-10-23T19:25:17.8266993Z",
+ "x-ms-file-parent-id" : "0",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "c6a9d818-f01a-0023-2472-a95fbd000000",
+ "x-ms-client-request-id" : "e4356993-57c0-41f4-bc96-41198da234a1",
+ "x-ms-file-last-write-time" : "2020-10-23T19:25:17.8266993Z"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c/fileasyncapitestslistrangesdiff0855387618dad0f0e?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "6c24d715-bd62-4511-821b-9b3400f87094",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778963D38AE0",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:24 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d81a-f01a-0023-2572-a95fbd000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:23 GMT",
+ "x-ms-client-request-id" : "6c24d715-bd62-4511-821b-9b3400f87094",
+ "Content-MD5" : "el6sFbI5QpqgPcmPL3zvLg=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c?restype=share&comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "57221a69-cb30-42b3-9f80-5c791e0c7645"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T19:25:24.0000000Z",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D877895FA5A2FA",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:17 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d823-f01a-0023-2972-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:23 GMT",
+ "x-ms-client-request-id" : "57221a69-cb30-42b3-9f80-5c791e0c7645"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff027689f25c969f76c/fileasyncapitestslistrangesdiff0855387618dad0f0e?prevsharesnapshot=2020-10-23T19%3A25%3A24.0000000Z&comp=rangelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "0fed3537-9eb5-4303-a5dc-c51453e1bd63"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-length" : "4194304",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:24 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 19:25:24 GMT",
+ "ETag" : "0x8D8778963D38AE0",
+ "Content-Length" : "51",
+ "x-ms-request-id" : "c6a9d824-f01a-0023-2a72-a95fbd000000",
+ "Body" : " ",
+ "x-ms-client-request-id" : "0fed3537-9eb5-4303-a5dc-c51453e1bd63",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "fileasyncapitestslistrangesdiff027689f25c969f76c", "fileasyncapitestslistrangesdiff0855387618dad0f0e" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff1.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff1.json
new file mode 100644
index 000000000000..2d41ac60a92a
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff1.json
@@ -0,0 +1,148 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48?restype=share",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "81756ff9-32a2-465a-841b-e0378b8bc5f7"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778964AED1F1",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:25 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d827-f01a-0023-2b72-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:25 GMT",
+ "x-ms-client-request-id" : "81756ff9-32a2-465a-841b-e0378b8bc5f7"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "a3a19d1f-17a1-42be-aa4d-fd2ff56584f2"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216",
+ "x-ms-file-id" : "13835128424026341376",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-file-creation-time" : "2020-10-23T19:25:25.7192738Z",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:25 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:25 GMT",
+ "ETag" : "0x8D8778964BC0122",
+ "x-ms-file-attributes" : "Archive",
+ "x-ms-file-change-time" : "2020-10-23T19:25:25.7192738Z",
+ "x-ms-file-parent-id" : "0",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "c6a9d829-f01a-0023-2c72-a95fbd000000",
+ "x-ms-client-request-id" : "a3a19d1f-17a1-42be-aa4d-fd2ff56584f2",
+ "x-ms-file-last-write-time" : "2020-10-23T19:25:25.7192738Z"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "e6ea8046-b212-4d65-b80e-d459a99e77fe",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D877896893EB83",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d82a-f01a-0023-2d72-a95fbd000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:31 GMT",
+ "x-ms-client-request-id" : "e6ea8046-b212-4d65-b80e-d459a99e77fe",
+ "Content-MD5" : "qCbPVCEbWSw22ZTay26hzQ=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48?restype=share&comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "16922d1d-0dd1-4d9b-945c-9499778deec1"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T19:25:32.0000000Z",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778964AED1F1",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:25 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d837-f01a-0023-3072-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:31 GMT",
+ "x-ms-client-request-id" : "16922d1d-0dd1-4d9b-945c-9499778deec1"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "f56d56c6-73a3-4c8e-93ea-63ef9e708e53",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778968CD5912",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d839-f01a-0023-3172-a95fbd000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:31 GMT",
+ "x-ms-client-request-id" : "f56d56c6-73a3-4c8e-93ea-63ef9e708e53",
+ "Content-MD5" : "UIGBXvZJYGrxPzCcPAXlUg=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff109485c713b811a48/fileasyncapitestslistrangesdiff15159784db21a3643?prevsharesnapshot=2020-10-23T19%3A25%3A32.0000000Z&comp=rangelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "043551a8-10db-48df-9e5e-94cc070cf19e"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-length" : "4194304",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 19:25:31 GMT",
+ "ETag" : "0x8D8778968CD5912",
+ "Content-Length" : "103",
+ "x-ms-request-id" : "c6a9d83a-f01a-0023-3272-a95fbd000000",
+ "Body" : "0 511 ",
+ "x-ms-client-request-id" : "043551a8-10db-48df-9e5e-94cc070cf19e",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "fileasyncapitestslistrangesdiff109485c713b811a48", "fileasyncapitestslistrangesdiff15159784db21a3643" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff2.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff2.json
new file mode 100644
index 000000000000..82edb39a3b3b
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff2.json
@@ -0,0 +1,145 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0?restype=share",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "d421326c-cf92-40c2-b923-bab1350da7fa"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778968EE8DB4",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d83d-f01a-0023-3472-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:32 GMT",
+ "x-ms-client-request-id" : "d421326c-cf92-40c2-b923-bab1350da7fa"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "0a20da02-0177-44c3-a3c2-d7a5ec6c1fd1"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216",
+ "x-ms-file-id" : "13835128424026341376",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-file-creation-time" : "2020-10-23T19:25:32.8671333Z",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:32 GMT",
+ "ETag" : "0x8D8778968FEAE65",
+ "x-ms-file-attributes" : "Archive",
+ "x-ms-file-change-time" : "2020-10-23T19:25:32.8671333Z",
+ "x-ms-file-parent-id" : "0",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "c6a9d840-f01a-0023-3572-a95fbd000000",
+ "x-ms-client-request-id" : "0a20da02-0177-44c3-a3c2-d7a5ec6c1fd1",
+ "x-ms-file-last-write-time" : "2020-10-23T19:25:32.8671333Z"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "24d7064e-3fc8-4a6a-8482-24f0ef3f0cfd",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D877896C8DBE20",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:38 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d841-f01a-0023-3672-a95fbd000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:38 GMT",
+ "x-ms-client-request-id" : "24d7064e-3fc8-4a6a-8482-24f0ef3f0cfd",
+ "Content-MD5" : "V3X8GGqXIMZBdjhQfO007Q=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0?restype=share&comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "d0470b67-9df7-419c-962d-c4723cdc1472"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T19:25:38.0000000Z",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778968EE8DB4",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:32 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d847-f01a-0023-3872-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:38 GMT",
+ "x-ms-client-request-id" : "d0470b67-9df7-419c-962d-c4723cdc1472"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "22d9ecf3-fa72-489c-aeb3-76b28ebe375d"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D877896CA25C98",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:38 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d848-f01a-0023-3972-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:38 GMT",
+ "x-ms-client-request-id" : "22d9ecf3-fa72-489c-aeb3-76b28ebe375d"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff244353c3fd45e11b0/fileasyncapitestslistrangesdiff236099c4aa0b70d0d?prevsharesnapshot=2020-10-23T19%3A25%3A38.0000000Z&comp=rangelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "c6bb85fa-f34d-4c53-ac75-3a82783171cc"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-length" : "4194304",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:38 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 19:25:38 GMT",
+ "ETag" : "0x8D877896CA25C98",
+ "Content-Length" : "113",
+ "x-ms-request-id" : "c6a9d849-f01a-0023-3a72-a95fbd000000",
+ "Body" : "0 511 ",
+ "x-ms-client-request-id" : "c6bb85fa-f34d-4c53-ac75-3a82783171cc",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "fileasyncapitestslistrangesdiff244353c3fd45e11b0", "fileasyncapitestslistrangesdiff236099c4aa0b70d0d" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff3.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff3.json
new file mode 100644
index 000000000000..9a0bd79879c1
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff3.json
@@ -0,0 +1,169 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c?restype=share",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "df51cc6b-f182-4c29-8b1c-8097a65c8086"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D877896CC24F09",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:39 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d84c-f01a-0023-3c72-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:38 GMT",
+ "x-ms-client-request-id" : "df51cc6b-f182-4c29-8b1c-8097a65c8086"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "d52ca394-05de-423b-a776-c67ef01bb5c7"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216",
+ "x-ms-file-id" : "13835128424026341376",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-file-creation-time" : "2020-10-23T19:25:39.2642730Z",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:39 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:38 GMT",
+ "ETag" : "0x8D877896CCECEAA",
+ "x-ms-file-attributes" : "Archive",
+ "x-ms-file-change-time" : "2020-10-23T19:25:39.2642730Z",
+ "x-ms-file-parent-id" : "0",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "c6a9d84e-f01a-0023-3d72-a95fbd000000",
+ "x-ms-client-request-id" : "d52ca394-05de-423b-a776-c67ef01bb5c7",
+ "x-ms-file-last-write-time" : "2020-10-23T19:25:39.2642730Z"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "d849648b-237f-40d0-bf42-cd6ac7838aa7",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778970ACADF4",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:45 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d84f-f01a-0023-3e72-a95fbd000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:45 GMT",
+ "x-ms-client-request-id" : "d849648b-237f-40d0-bf42-cd6ac7838aa7",
+ "Content-MD5" : "mK+H17R2gJMhDlqjSmcZBA=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c?restype=share&comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "272d000b-53b5-43d2-add7-4caef294f26e"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T19:25:45.0000000Z",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D877896CC24F09",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:39 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d873-f01a-0023-5772-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:45 GMT",
+ "x-ms-client-request-id" : "272d000b-53b5-43d2-add7-4caef294f26e"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "1dcf079c-0d59-43bb-bb96-6f135590ac48",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778970DAF542",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d874-f01a-0023-5872-a95fbd000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:45 GMT",
+ "x-ms-client-request-id" : "1dcf079c-0d59-43bb-bb96-6f135590ac48",
+ "Content-MD5" : "o7mDXQ2eBH1fnqg4a1M9jw=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "fb14c38e-0bd1-4454-9359-5fdaf93bd297"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778970E222F3",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d875-f01a-0023-5972-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:45 GMT",
+ "x-ms-client-request-id" : "fb14c38e-0bd1-4454-9359-5fdaf93bd297"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff3991527c5b6a0bc2c/fileasyncapitestslistrangesdiff391949086f13c2af9?prevsharesnapshot=2020-10-23T19%3A25%3A45.0000000Z&comp=rangelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "02e376bb-9c1f-4dee-b513-f4a8514ddb57"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-length" : "4194304",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 19:25:45 GMT",
+ "ETag" : "0x8D8778970E222F3",
+ "Content-Length" : "161",
+ "x-ms-request-id" : "c6a9d876-f01a-0023-5a72-a95fbd000000",
+ "Body" : "0 511 512 1023 ",
+ "x-ms-client-request-id" : "02e376bb-9c1f-4dee-b513-f4a8514ddb57",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "fileasyncapitestslistrangesdiff3991527c5b6a0bc2c", "fileasyncapitestslistrangesdiff391949086f13c2af9" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff4.json b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff4.json
new file mode 100644
index 000000000000..2fff2a41d7a5
--- /dev/null
+++ b/sdk/storage/azure-storage-file-share/src/test/resources/session-records/FileAsyncAPITestsListRangesDiff4.json
@@ -0,0 +1,214 @@
+{
+ "networkCallRecords" : [ {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976?restype=share",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "681d9fe0-83fa-4f40-94be-ffac49a45ed8"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778970FE6074",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d878-f01a-0023-5b72-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:45 GMT",
+ "x-ms-client-request-id" : "681d9fe0-83fa-4f40-94be-ffac49a45ed8"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "64dc7fc5-3d01-4f7d-be77-8e175d63549c"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-file-permission-key" : "2189138948451189390*13168958551941065216",
+ "x-ms-file-id" : "13835128424026341376",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-file-creation-time" : "2020-10-23T19:25:46.3640874Z",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:45 GMT",
+ "ETag" : "0x8D87789710A272A",
+ "x-ms-file-attributes" : "Archive",
+ "x-ms-file-change-time" : "2020-10-23T19:25:46.3640874Z",
+ "x-ms-file-parent-id" : "0",
+ "Content-Length" : "0",
+ "x-ms-request-id" : "c6a9d87b-f01a-0023-5c72-a95fbd000000",
+ "x-ms-client-request-id" : "64dc7fc5-3d01-4f7d-be77-8e175d63549c",
+ "x-ms-file-last-write-time" : "2020-10-23T19:25:46.3640874Z"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "e38a2b41-c477-47f4-be0e-2986727d0de8",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87789749ABDDB",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:52 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d87c-f01a-0023-5d72-a95fbd000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:51 GMT",
+ "x-ms-client-request-id" : "e38a2b41-c477-47f4-be0e-2986727d0de8",
+ "Content-MD5" : "fumkz1IO6/Z3xiWdH4nUTQ=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976?restype=share&comp=snapshot",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "e534b91e-54d0-4d2c-96e8-2ef59b87733d"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "x-ms-snapshot" : "2020-10-23T19:25:52.0000000Z",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778970FE6074",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:46 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d889-f01a-0023-6372-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:51 GMT",
+ "x-ms-client-request-id" : "e534b91e-54d0-4d2c-96e8-2ef59b87733d"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "b5d24903-f55f-44df-8753-54357e94cf2e",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778974B41874",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:52 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d88b-f01a-0023-6472-a95fbd000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:51 GMT",
+ "x-ms-client-request-id" : "b5d24903-f55f-44df-8753-54357e94cf2e",
+ "Content-MD5" : "jDgJRT9kgYsJHaSBYWcvcg=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "4695b74b-ec1d-4381-8a23-ca3691ad2ddc",
+ "Content-Type" : "application/octet-stream"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D8778974E25FC3",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:52 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "7a93ddd8-201a-00c4-5b72-a94fb0000000",
+ "x-ms-request-server-encrypted" : "true",
+ "Date" : "Fri, 23 Oct 2020 19:25:52 GMT",
+ "x-ms-client-request-id" : "4695b74b-ec1d-4381-8a23-ca3691ad2ddc",
+ "Content-MD5" : "24qkYSCoEUBF8bVKj/E8Hw=="
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "8c4eb5a1-6729-4877-8f83-8494b170be09"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D877897508B5DE",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:53 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "c6a9d88c-f01a-0023-6572-a95fbd000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:52 GMT",
+ "x-ms-client-request-id" : "8c4eb5a1-6729-4877-8f83-8494b170be09"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "PUT",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?comp=range",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "8d062fb2-b996-429b-9ee8-9792129417af"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "ETag" : "0x8D87789750F9565",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:53 GMT",
+ "retry-after" : "0",
+ "Content-Length" : "0",
+ "StatusCode" : "201",
+ "x-ms-request-id" : "7a93dddc-201a-00c4-5c72-a94fb0000000",
+ "Date" : "Fri, 23 Oct 2020 19:25:53 GMT",
+ "x-ms-client-request-id" : "8d062fb2-b996-429b-9ee8-9792129417af"
+ },
+ "Exception" : null
+ }, {
+ "Method" : "GET",
+ "Uri" : "https://REDACTED.file.core.windows.net/fileasyncapitestslistrangesdiff49440340b8d5b2976/fileasyncapitestslistrangesdiff450097881e6a738e5?prevsharesnapshot=2020-10-23T19%3A25%3A52.0000000Z&comp=rangelist",
+ "Headers" : {
+ "x-ms-version" : "2020-02-10",
+ "User-Agent" : "azsdk-java-azure-storage-file-share/12.7.0-beta.2 (11.0.6; Windows 10; 10.0)",
+ "x-ms-client-request-id" : "4d683e83-f918-4161-912b-b3b17a2a27c1"
+ },
+ "Response" : {
+ "x-ms-version" : "2020-02-10",
+ "Server" : "Windows-Azure-File/1.0 Microsoft-HTTPAPI/2.0",
+ "x-ms-content-length" : "4194304",
+ "Last-Modified" : "Fri, 23 Oct 2020 19:25:53 GMT",
+ "retry-after" : "0",
+ "StatusCode" : "200",
+ "Date" : "Fri, 23 Oct 2020 19:25:54 GMT",
+ "ETag" : "0x8D87789750F9565",
+ "Content-Length" : "269",
+ "x-ms-request-id" : "7a93ddde-201a-00c4-5d72-a94fb0000000",
+ "Body" : "0 511 512 1023 1024 1535 1536 2047 ",
+ "x-ms-client-request-id" : "4d683e83-f918-4161-912b-b3b17a2a27c1",
+ "Content-Type" : "application/xml"
+ },
+ "Exception" : null
+ } ],
+ "variables" : [ "fileasyncapitestslistrangesdiff49440340b8d5b2976", "fileasyncapitestslistrangesdiff450097881e6a738e5" ]
+}
\ No newline at end of file
diff --git a/sdk/storage/azure-storage-file-share/swagger/README.md b/sdk/storage/azure-storage-file-share/swagger/README.md
index 4879103fce26..077465e80907 100644
--- a/sdk/storage/azure-storage-file-share/swagger/README.md
+++ b/sdk/storage/azure-storage-file-share/swagger/README.md
@@ -857,5 +857,20 @@ directive:
delete $["x-ms-parameter-grouping"];
```
+### Add the ShareFileRangeListDeserializer attribute
+``` yaml
+directive:
+- from: ShareFileRangeList.java
+ where: $
+ transform: >
+ return $.
+ replace(
+ "import com.fasterxml.jackson.annotation.JsonProperty;",
+ "import com.fasterxml.jackson.annotation.JsonProperty;\nimport com.fasterxml.jackson.databind.annotation.JsonDeserialize;").
+ replace(
+ "public final class ShareFileRangeList {",
+ "@JsonDeserialize(using = ShareFileRangeListDeserializer.class)\npublic final class ShareFileRangeList {");
+```
+
