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" : "jtcpagelistcustomdeserializerjtcpagelistcustomdeserializer0983603c0fdf6584964dThu, 22 Oct 2020 20:58:22 GMT\"0x8D876CD36648A7A\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "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" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff951744775Fri, 23 Oct 2020 18:29:51 GMT\"0x8D87781A1464F0F\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "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" : "0511", + "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" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff1d5757127Fri, 23 Oct 2020 18:29:57 GMT\"0x8D87781A52604CF\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "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" : "0511", + "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" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff2b908384bFri, 23 Oct 2020 18:30:03 GMT\"0x8D87781A8CBB041\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "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" : "05115121023", + "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" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiffe63969895Fri, 23 Oct 2020 18:30:09 GMT\"0x8D87781AC67E3B9\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "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" : "051151210231024153515362047", + "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" : "jtcgetpagerangesdiffjtcgetpagerangesdiff0pageblobapitestgetpagerangesdiff8e940411eFri, 23 Oct 2020 18:30:16 GMT\"0x8D87781B00B6BD2\"unlockedavailable$account-encryption-keyfalsefalsefalse", + "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" : "0511", + "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" : "0511", + "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" : "05115121023", + "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" : "051151210231024153515362047", + "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" : "0511", + "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" : "0511", + "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" : "05115121023", + "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" : "051151210231024153515362047", + "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 {"); +``` + ![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-java%2Fsdk%2Fstorage%2Fazure-storage-file-share%2Fswagger%2FREADME.png)