diff --git a/sdk/storage/azure-storage-blobs/CHANGELOG.md b/sdk/storage/azure-storage-blobs/CHANGELOG.md index 5cf3c6699d..7683eb758b 100644 --- a/sdk/storage/azure-storage-blobs/CHANGELOG.md +++ b/sdk/storage/azure-storage-blobs/CHANGELOG.md @@ -1,5 +1,20 @@ # Release History +## 12.6.0-beta1 (Unreleased) + +### Features Added + +- Bumped up API version to `2021-04-10`. +- Added support for encryption scope SAS (`ses` query parameter in SAS token). +- Added encryption scope support for `BlobClient::CopyFromUri()`. +- Added support for filtering blobs on container level. +- Added support for tags copy mode (replace or copy from source) when copying blobs from URL. +- Added support for permanent delete permission in SAS. + +### Bugs Fixed + +- Fixed listing blobs failure when blob name contains invalid characters in xml. + ## 12.5.0 (2022-08-08) ### Features Added diff --git a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_container_client.hpp b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_container_client.hpp index e25d3c8235..74a4de2dc5 100644 --- a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_container_client.hpp +++ b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_container_client.hpp @@ -285,6 +285,24 @@ namespace Azure { namespace Storage { namespace Blobs { const UploadBlockBlobOptions& options = UploadBlockBlobOptions(), const Azure::Core::Context& context = Azure::Core::Context()) const; + /** + * @brief The Filter Blobs operation enables callers to list blobs in a container whose + * tags match a given search expression. + * + * @param tagFilterSqlExpression The where parameter enables the caller to query blobs + * whose tags match a given expression. The given expression must evaluate to true for a blob to + * be returned in the results. The [OData - ABNF] filter syntax rule defines the formal grammar + * for the value of the where query parameter, however, only a subset of the OData filter syntax + * is supported in the Blob service. + * @param options Optional parameters to execute this function. + * @param context Context for cancelling long running operations. + * @return A FindBlobsByTagsPagedResponse describing the blobs. + */ + FindBlobsByTagsPagedResponse FindBlobsByTags( + const std::string& tagFilterSqlExpression, + const FindBlobsByTagsOptions& options = FindBlobsByTagsOptions(), + const Azure::Core::Context& context = Azure::Core::Context()) const; + /** * @brief Creates a new batch object to collect subrequests that can be submitted together via * SubmitBatch. diff --git a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_options.hpp b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_options.hpp index 912cee90ec..9235eeeb35 100644 --- a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_options.hpp +++ b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_options.hpp @@ -574,6 +574,12 @@ namespace Azure { namespace Storage { namespace Blobs { * Indicates whether the destination blob has a legal hold. */ Azure::Nullable HasLegalHold; + + /** + * Indicates the tags on the destination blob should be copied from source or replaced by Tags + * in this option. Default is to replace. + */ + Models::BlobCopySourceTagsMode CopySourceTagsMode; }; /** @@ -932,6 +938,12 @@ namespace Azure { namespace Storage { namespace Blobs { * If the two hashes do not match, the operation will fail. */ Azure::Nullable TransactionalContentHash; + + /** + * Indicates the tags on the destination blob should be copied from source or replaced by Tags + * in this option. Default is to replace. + */ + Models::BlobCopySourceTagsMode CopySourceTagsMode; }; /** diff --git a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_responses.hpp b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_responses.hpp index 573265ca44..b0bf4fdd64 100644 --- a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_responses.hpp +++ b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_responses.hpp @@ -163,6 +163,49 @@ namespace Azure { namespace Storage { std::string LeaseId; }; + /** + * @brief An Azure Storage blob. + */ + struct BlobItem final + { + /** + * Blob name. + */ + std::string Name; + /** + * Indicates whether this blob was deleted. + */ + bool IsDeleted = bool(); + /** + * A string value that uniquely identifies a blob snapshot. + */ + std::string Snapshot; + /** + * A string value that uniquely identifies a blob version. + */ + Nullable VersionId; + /** + * Indicates if this is the current version of the blob. + */ + Nullable IsCurrentVersion; + /** + * Properties of a blob. + */ + BlobItemDetails Details; + /** + * Indicates that this root blob has been deleted, but it has versions that are active. + */ + Nullable HasVersionsOnly; + /** + * Size in bytes. + */ + int64_t BlobSize = int64_t(); + /** + * Type of the blob. + */ + Models::BlobType BlobType; + }; + /** * @brief Response type for #Azure::Storage::Blobs::BlobBatchClient::SubmitBatch. */ @@ -267,10 +310,12 @@ namespace Azure { namespace Storage { void OnNextPage(const Azure::Core::Context& context); std::shared_ptr m_blobServiceClient; + std::shared_ptr m_blobContainerClient; FindBlobsByTagsOptions m_operationOptions; std::string m_tagFilterSqlExpression; friend class BlobServiceClient; + friend class BlobContainerClient; friend class Azure::Core::PagedResponse; }; diff --git a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_sas_builder.hpp b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_sas_builder.hpp index b988b4ba21..16c27507a3 100644 --- a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_sas_builder.hpp +++ b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/blob_sas_builder.hpp @@ -90,6 +90,11 @@ namespace Azure { namespace Storage { namespace Sas { */ SetImmutabilityPolicy = 256, + /** + * @brief Indicates that permanent delete is permitted. + */ + PermanentDelete = 512, + /** * @brief Indicates that all permissions are set. */ @@ -160,6 +165,11 @@ namespace Azure { namespace Storage { namespace Sas { */ SetImmutabilityPolicy = 128, + /** + * @brief Indicates that permanent delete is permitted. + */ + PermanentDelete = 256, + /** * @brief Indicates that all permissions are set. */ @@ -269,6 +279,11 @@ namespace Azure { namespace Storage { namespace Sas { */ std::string ContentType; + /** + * @brief Optional encryption scope to use when sending requests authorized with this SAS url. + */ + std::string EncryptionScope; + /** * @brief Sets the permissions for the blob container SAS. * diff --git a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/rest_client.hpp b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/rest_client.hpp index 316f370646..2cb58be985 100644 --- a/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/rest_client.hpp +++ b/sdk/storage/azure-storage-blobs/inc/azure/storage/blobs/rest_client.hpp @@ -31,7 +31,7 @@ namespace Azure { namespace Storage { namespace Blobs { /** * The version used for the operations to Azure storage services. */ - constexpr static const char* ApiVersion = "2020-10-02"; + constexpr static const char* ApiVersion = "2021-04-10"; } // namespace _detail namespace Models { /** @@ -619,20 +619,6 @@ namespace Azure { namespace Storage { namespace Blobs { */ std::map Tags; }; - namespace _detail { - /** - * @brief The result of a Filter Blobs API call. - */ - struct FindBlobsByTagsResult final - { - std::string ServiceEndpoint; - /** - * Array of TaggedBlobItem. - */ - std::vector Items; - Nullable ContinuationToken; - }; - } // namespace _detail /** * @brief Response type for #Azure::Storage::Blobs::BlobContainerClient::Create. */ @@ -820,6 +806,18 @@ namespace Azure { namespace Storage { namespace Blobs { */ std::string ContentType; }; + /** + * @brief The result of a Filter Blobs API call. + */ + struct FindBlobsByTagsResult final + { + std::string ServiceEndpoint; + /** + * Array of TaggedBlobItem. + */ + std::vector Items; + Nullable ContinuationToken; + }; /** * @brief Response type for #Azure::Storage::Blobs::BlobContainerClient::AcquireLease. */ @@ -921,6 +919,17 @@ namespace Azure { namespace Storage { namespace Blobs { */ std::string LeaseId; }; + struct BlobName final + { + /** + * Indicates if the blob name is encoded. + */ + bool Encoded = bool(); + /** + * The name of the blob. + */ + std::string Content; + }; } // namespace _detail /** * @brief Status of the copy operation. @@ -1314,48 +1323,50 @@ namespace Azure { namespace Storage { namespace Blobs { private: std::string m_value; }; - /** - * @brief An Azure Storage blob. - */ - struct BlobItem final - { - /** - * Blob name. - */ - std::string Name; - /** - * Indicates whether this blob was deleted. - */ - bool IsDeleted = bool(); - /** - * A string value that uniquely identifies a blob snapshot. - */ - std::string Snapshot; - /** - * A string value that uniquely identifies a blob version. - */ - Nullable VersionId; - /** - * Indicates if this is the current version of the blob. - */ - Nullable IsCurrentVersion; - /** - * Properties of a blob. - */ - BlobItemDetails Details; - /** - * Indicates that this root blob has been deleted, but it has versions that are active. - */ - Nullable HasVersionsOnly; - /** - * Size in bytes. - */ - int64_t BlobSize = int64_t(); + namespace _detail { /** - * Type of the blob. + * @brief An Azure Storage blob. */ - Models::BlobType BlobType; - }; + struct BlobItem final + { + /** + * Blob name. + */ + BlobName Name; + /** + * Indicates whether this blob was deleted. + */ + bool IsDeleted = bool(); + /** + * A string value that uniquely identifies a blob snapshot. + */ + std::string Snapshot; + /** + * A string value that uniquely identifies a blob version. + */ + Nullable VersionId; + /** + * Indicates if this is the current version of the blob. + */ + Nullable IsCurrentVersion; + /** + * Properties of a blob. + */ + BlobItemDetails Details; + /** + * Indicates that this root blob has been deleted, but it has versions that are active. + */ + Nullable HasVersionsOnly; + /** + * Size in bytes. + */ + int64_t BlobSize = int64_t(); + /** + * Type of the blob. + */ + Models::BlobType BlobType; + }; + } // namespace _detail /** * @brief Include this parameter to specify one or more datasets to include in the response. */ @@ -1423,9 +1434,9 @@ namespace Azure { namespace Storage { namespace Blobs { */ std::vector Items; /** - * Array of ListBlobsHierarchySegmentResponseBlobPrefixesItem. + * Array of BlobName. */ - std::vector BlobPrefixes; + std::vector BlobPrefixes; }; } // namespace _detail /** @@ -2159,6 +2170,26 @@ namespace Azure { namespace Storage { namespace Blobs { Models::CopyStatus CopyStatus; }; } // namespace _detail + /** + * @brief Optional, default 'replace'. Indicates if source tags should be copied or replaced + * with the tags specified by x-ms-tags. + */ + class BlobCopySourceTagsMode final { + public: + BlobCopySourceTagsMode() = default; + explicit BlobCopySourceTagsMode(std::string value) : m_value(std::move(value)) {} + bool operator==(const BlobCopySourceTagsMode& other) const + { + return m_value == other.m_value; + } + bool operator!=(const BlobCopySourceTagsMode& other) const { return !(*this == other); } + const std::string& ToString() const { return m_value; } + AZ_STORAGE_BLOBS_DLLEXPORT const static BlobCopySourceTagsMode Replace; + AZ_STORAGE_BLOBS_DLLEXPORT const static BlobCopySourceTagsMode Copy; + + private: + std::string m_value; + }; /** * @brief Response type for #Azure::Storage::Blobs::BlobClient::CopyFromUri. */ @@ -2194,6 +2225,12 @@ namespace Azure { namespace Storage { namespace Blobs { * copied content. This header is only returned if the source content MD5 was specified. */ Nullable TransactionalContentHash; + /** + * Returns the name of the encryption scope used to encrypt the blob contents and application + * metadata. Note that the absence of this header implies use of the default account + * encryption scope. + */ + Nullable EncryptionScope; }; /** * @brief Response type for #Azure::Storage::Blobs::BlobClient::AbortCopyFromUri. @@ -3323,6 +3360,17 @@ namespace Azure { namespace Storage { namespace Blobs { Core::IO::BodyStream& requestBody, const SubmitBlobContainerBatchOptions& options, const Core::Context& context); + struct FindBlobContainerBlobsByTagsOptions final + { + Nullable Where; + Nullable Marker; + Nullable MaxResults; + }; + static Response FindBlobsByTags( + Core::Http::_internal::HttpPipeline& pipeline, + const Core::Url& url, + const FindBlobContainerBlobsByTagsOptions& options, + const Core::Context& context); struct AcquireBlobContainerLeaseOptions final { Nullable Duration; @@ -3692,6 +3740,8 @@ namespace Azure { namespace Storage { namespace Blobs { Nullable ImmutabilityPolicyMode; Nullable LegalHold; Nullable CopySourceAuthorization; + Nullable EncryptionScope; + Nullable CopySourceTags; Nullable> SourceContentcrc64; }; static Response CopyFromUri( @@ -4134,6 +4184,7 @@ namespace Azure { namespace Storage { namespace Blobs { std::string CopySource; Nullable CopySourceBlobProperties; Nullable CopySourceAuthorization; + Nullable CopySourceTags; Nullable> SourceContentcrc64; }; static Response UploadFromUri( diff --git a/sdk/storage/azure-storage-blobs/src/blob_client.cpp b/sdk/storage/azure-storage-blobs/src/blob_client.cpp index f82598396e..e391f3e376 100644 --- a/sdk/storage/azure-storage-blobs/src/blob_client.cpp +++ b/sdk/storage/azure-storage-blobs/src/blob_client.cpp @@ -677,6 +677,8 @@ namespace Azure { namespace Storage { namespace Blobs { protocolLayerOptions.ImmutabilityPolicyMode = options.ImmutabilityPolicy.Value().PolicyMode; } protocolLayerOptions.LegalHold = options.HasLegalHold; + protocolLayerOptions.EncryptionScope = m_encryptionScope; + protocolLayerOptions.CopySourceTags = options.CopySourceTagsMode; return _detail::BlobClient::CopyFromUri(*m_pipeline, m_blobUrl, protocolLayerOptions, context); } diff --git a/sdk/storage/azure-storage-blobs/src/blob_container_client.cpp b/sdk/storage/azure-storage-blobs/src/blob_container_client.cpp index b79eab00a4..806a753aaf 100644 --- a/sdk/storage/azure-storage-blobs/src/blob_container_client.cpp +++ b/sdk/storage/azure-storage-blobs/src/blob_container_client.cpp @@ -22,6 +22,87 @@ namespace Azure { namespace Storage { namespace Blobs { + namespace { + Models::BlobItem BlobItemConversion(Models::_detail::BlobItem& item) + { + Models::BlobItem blobItem; + if (item.Name.Encoded) + { + blobItem.Name = Core::Url::Decode(item.Name.Content); + } + else + { + blobItem.Name = std::move(item.Name.Content); + } + blobItem.IsDeleted = item.IsDeleted; + blobItem.Snapshot = std::move(item.Snapshot); + blobItem.VersionId = std::move(item.VersionId); + blobItem.IsCurrentVersion = item.IsCurrentVersion; + blobItem.Details = std::move(item.Details); + blobItem.HasVersionsOnly = item.HasVersionsOnly; + blobItem.BlobSize = item.BlobSize; + blobItem.BlobType = std::move(item.BlobType); + if (blobItem.Details.AccessTier.HasValue() + && !blobItem.Details.IsAccessTierInferred.HasValue()) + { + blobItem.Details.IsAccessTierInferred = false; + } + if (blobItem.VersionId.HasValue()) + { + if (!blobItem.HasVersionsOnly.HasValue()) + { + blobItem.HasVersionsOnly = false; + } + if (!blobItem.IsCurrentVersion.HasValue()) + { + blobItem.IsCurrentVersion = false; + } + } + if (blobItem.BlobType == Models::BlobType::AppendBlob + && !blobItem.Details.IsSealed.HasValue()) + { + blobItem.Details.IsSealed = false; + } + if (blobItem.Details.CopyStatus.HasValue() && !blobItem.Details.IsIncrementalCopy.HasValue()) + { + blobItem.Details.IsIncrementalCopy = false; + } + { + /* + * Object replication metadata is in the following format. + * + * replication status + * <...> + * + * + * We'll convert the metadata to a vector of policies, each policy being a vector of rules. + */ + std::map> orPropertiesMap; + for (auto& policy : blobItem.Details.ObjectReplicationSourceProperties) + { + for (auto& rule : policy.Rules) + { + auto underscorePos = rule.RuleId.find('_', 3); + std::string policyId + = std::string(rule.RuleId.begin() + 3, rule.RuleId.begin() + underscorePos); + std::string ruleId = rule.RuleId.substr(underscorePos + 1); + rule.RuleId = ruleId; + orPropertiesMap[policyId].emplace_back(std::move(rule)); + } + } + blobItem.Details.ObjectReplicationSourceProperties.clear(); + for (auto& property : orPropertiesMap) + { + Models::ObjectReplicationPolicy policy; + policy.PolicyId = property.first; + policy.Rules = std::move(property.second); + blobItem.Details.ObjectReplicationSourceProperties.emplace_back(std::move(policy)); + } + } + return blobItem; + } + } // namespace + BlobContainerClient BlobContainerClient::CreateFromConnectionString( const std::string& connectionString, const std::string& blobContainerName, @@ -271,61 +352,15 @@ namespace Azure { namespace Storage { namespace Blobs { m_blobContainerUrl, protocolLayerOptions, _internal::WithReplicaStatus(context)); - for (auto& i : response.Value.Items) - { - if (i.Details.AccessTier.HasValue() && !i.Details.IsAccessTierInferred.HasValue()) - { - i.Details.IsAccessTierInferred = false; - } - if (i.VersionId.HasValue()) - { - if (!i.HasVersionsOnly.HasValue()) - { - i.HasVersionsOnly = false; - } - if (!i.IsCurrentVersion.HasValue()) - { - i.IsCurrentVersion = false; - } - } - if (i.BlobType == Models::BlobType::AppendBlob && !i.Details.IsSealed.HasValue()) - { - i.Details.IsSealed = false; - } - if (i.Details.CopyStatus.HasValue() && !i.Details.IsIncrementalCopy.HasValue()) - { - i.Details.IsIncrementalCopy = false; - } - { - std::map> orPropertiesMap; - for (auto& policy : i.Details.ObjectReplicationSourceProperties) - { - for (auto& rule : policy.Rules) - { - auto underscorePos = rule.RuleId.find('_', 3); - std::string policyId - = std::string(rule.RuleId.begin() + 3, rule.RuleId.begin() + underscorePos); - std::string ruleId = rule.RuleId.substr(underscorePos + 1); - rule.RuleId = ruleId; - orPropertiesMap[policyId].emplace_back(std::move(rule)); - } - } - i.Details.ObjectReplicationSourceProperties.clear(); - for (auto& property : orPropertiesMap) - { - Models::ObjectReplicationPolicy policy; - policy.PolicyId = property.first; - policy.Rules = std::move(property.second); - i.Details.ObjectReplicationSourceProperties.emplace_back(std::move(policy)); - } - } - } ListBlobsPagedResponse pagedResponse; pagedResponse.ServiceEndpoint = std::move(response.Value.ServiceEndpoint); pagedResponse.BlobContainerName = std::move(response.Value.BlobContainerName); pagedResponse.Prefix = std::move(response.Value.Prefix); - pagedResponse.Blobs = std::move(response.Value.Items); + for (auto& i : response.Value.Items) + { + pagedResponse.Blobs.push_back(BlobItemConversion(i)); + } pagedResponse.m_blobContainerClient = std::make_shared(*this); pagedResponse.m_operationOptions = options; pagedResponse.CurrentPageToken = options.ContinuationToken.ValueOr(std::string()); @@ -351,55 +386,6 @@ namespace Azure { namespace Storage { namespace Blobs { m_blobContainerUrl, protocolLayerOptions, _internal::WithReplicaStatus(context)); - for (auto& i : response.Value.Items) - { - if (i.Details.AccessTier.HasValue() && !i.Details.IsAccessTierInferred.HasValue()) - { - i.Details.IsAccessTierInferred = false; - } - if (i.VersionId.HasValue()) - { - if (!i.HasVersionsOnly.HasValue()) - { - i.HasVersionsOnly = false; - } - if (!i.IsCurrentVersion.HasValue()) - { - i.IsCurrentVersion = false; - } - } - if (i.BlobType == Models::BlobType::AppendBlob && !i.Details.IsSealed.HasValue()) - { - i.Details.IsSealed = false; - } - if (i.Details.CopyStatus.HasValue() && !i.Details.IsIncrementalCopy.HasValue()) - { - i.Details.IsIncrementalCopy = false; - } - { - std::map> orPropertiesMap; - for (auto& policy : i.Details.ObjectReplicationSourceProperties) - { - for (auto& rule : policy.Rules) - { - auto underscorePos = rule.RuleId.find('_', 3); - std::string policyId - = std::string(rule.RuleId.begin() + 3, rule.RuleId.begin() + underscorePos); - std::string ruleId = rule.RuleId.substr(underscorePos + 1); - rule.RuleId = ruleId; - orPropertiesMap[policyId].emplace_back(std::move(rule)); - } - } - i.Details.ObjectReplicationSourceProperties.clear(); - for (auto& property : orPropertiesMap) - { - Models::ObjectReplicationPolicy policy; - policy.PolicyId = property.first; - policy.Rules = std::move(property.second); - i.Details.ObjectReplicationSourceProperties.emplace_back(std::move(policy)); - } - } - } ListBlobsByHierarchyPagedResponse pagedResponse; @@ -407,8 +393,21 @@ namespace Azure { namespace Storage { namespace Blobs { pagedResponse.BlobContainerName = std::move(response.Value.BlobContainerName); pagedResponse.Prefix = std::move(response.Value.Prefix); pagedResponse.Delimiter = std::move(response.Value.Delimiter); - pagedResponse.Blobs = std::move(response.Value.Items); - pagedResponse.BlobPrefixes = std::move(response.Value.BlobPrefixes); + for (auto& i : response.Value.Items) + { + pagedResponse.Blobs.push_back(BlobItemConversion(i)); + } + for (auto& i : response.Value.BlobPrefixes) + { + if (i.Encoded) + { + pagedResponse.BlobPrefixes.push_back(Core::Url::Decode(i.Content)); + } + else + { + pagedResponse.BlobPrefixes.push_back(std::move(i.Content)); + } + } pagedResponse.m_blobContainerClient = std::make_shared(*this); pagedResponse.m_operationOptions = options; pagedResponse.m_delimiter = delimiter; @@ -467,6 +466,34 @@ namespace Azure { namespace Storage { namespace Blobs { std::move(blockBlobClient), std::move(response.RawResponse)); } + FindBlobsByTagsPagedResponse BlobContainerClient::FindBlobsByTags( + const std::string& tagFilterSqlExpression, + const FindBlobsByTagsOptions& options, + const Azure::Core::Context& context) const + { + _detail::BlobContainerClient::FindBlobContainerBlobsByTagsOptions protocolLayerOptions; + protocolLayerOptions.Where = tagFilterSqlExpression; + protocolLayerOptions.Marker = options.ContinuationToken; + protocolLayerOptions.MaxResults = options.PageSizeHint; + auto response = _detail::BlobContainerClient::FindBlobsByTags( + *m_pipeline, + m_blobContainerUrl, + protocolLayerOptions, + _internal::WithReplicaStatus(context)); + + FindBlobsByTagsPagedResponse pagedResponse; + pagedResponse.ServiceEndpoint = std::move(response.Value.ServiceEndpoint); + pagedResponse.TaggedBlobs = std::move(response.Value.Items); + pagedResponse.m_blobContainerClient = std::make_shared(*this); + pagedResponse.m_operationOptions = options; + pagedResponse.m_tagFilterSqlExpression = tagFilterSqlExpression; + pagedResponse.CurrentPageToken = options.ContinuationToken.ValueOr(std::string()); + pagedResponse.NextPageToken = response.Value.ContinuationToken; + pagedResponse.RawResponse = std::move(response.RawResponse); + + return pagedResponse; + } + BlobContainerBatch BlobContainerClient::CreateBatch() const { return BlobContainerBatch(*this); } Response BlobContainerClient::SubmitBatch( @@ -487,5 +514,4 @@ namespace Azure { namespace Storage { namespace Blobs { return Azure::Response( Models::SubmitBlobBatchResult(), std::move(response.RawResponse)); } - }}} // namespace Azure::Storage::Blobs diff --git a/sdk/storage/azure-storage-blobs/src/blob_responses.cpp b/sdk/storage/azure-storage-blobs/src/blob_responses.cpp index a8f5269d65..bc736cbd4c 100644 --- a/sdk/storage/azure-storage-blobs/src/blob_responses.cpp +++ b/sdk/storage/azure-storage-blobs/src/blob_responses.cpp @@ -70,8 +70,16 @@ namespace Azure { namespace Storage { namespace Blobs { void FindBlobsByTagsPagedResponse::OnNextPage(const Azure::Core::Context& context) { m_operationOptions.ContinuationToken = NextPageToken; - *this = m_blobServiceClient->FindBlobsByTags( - m_tagFilterSqlExpression, m_operationOptions, context); + if (m_blobServiceClient) + { + *this = m_blobServiceClient->FindBlobsByTags( + m_tagFilterSqlExpression, m_operationOptions, context); + } + else + { + *this = m_blobContainerClient->FindBlobsByTags( + m_tagFilterSqlExpression, m_operationOptions, context); + } } void ListBlobsPagedResponse::OnNextPage(const Azure::Core::Context& context) diff --git a/sdk/storage/azure-storage-blobs/src/blob_sas_builder.cpp b/sdk/storage/azure-storage-blobs/src/blob_sas_builder.cpp index 35d7677df0..c629933eab 100644 --- a/sdk/storage/azure-storage-blobs/src/blob_sas_builder.cpp +++ b/sdk/storage/azure-storage-blobs/src/blob_sas_builder.cpp @@ -67,6 +67,11 @@ namespace Azure { namespace Storage { namespace Sas { { Permissions += "x"; } + if ((permissions & BlobContainerSasPermissions::PermanentDelete) + == BlobContainerSasPermissions::PermanentDelete) + { + Permissions += "y"; + } if ((permissions & BlobContainerSasPermissions::List) == BlobContainerSasPermissions::List) { Permissions += "l"; @@ -110,6 +115,10 @@ namespace Azure { namespace Storage { namespace Sas { { Permissions += "x"; } + if ((permissions & BlobSasPermissions::PermanentDelete) == BlobSasPermissions::PermanentDelete) + { + Permissions += "y"; + } if ((permissions & BlobSasPermissions::Tags) == BlobSasPermissions::Tags) { Permissions += "t"; @@ -154,8 +163,8 @@ namespace Azure { namespace Storage { namespace Sas { std::string stringToSign = Permissions + "\n" + startsOnStr + "\n" + expiresOnStr + "\n" + canonicalName + "\n" + Identifier + "\n" + (IPRange.HasValue() ? IPRange.Value() : "") + "\n" + protocol + "\n" + SasVersion + "\n" + resource + "\n" + snapshotVersion + "\n" - + CacheControl + "\n" + ContentDisposition + "\n" + ContentEncoding + "\n" + ContentLanguage - + "\n" + ContentType; + + EncryptionScope + "\n" + CacheControl + "\n" + ContentDisposition + "\n" + ContentEncoding + + "\n" + ContentLanguage + "\n" + ContentType; std::string signature = Azure::Core::Convert::Base64Encode(_internal::HmacSha256( std::vector(stringToSign.begin(), stringToSign.end()), @@ -206,6 +215,10 @@ namespace Azure { namespace Storage { namespace Sas { { builder.AppendQueryParameter("rsct", _internal::UrlEncodeQueryParameter(ContentType)); } + if (!EncryptionScope.empty()) + { + builder.AppendQueryParameter("ses", _internal::UrlEncodeQueryParameter(EncryptionScope)); + } return builder.GetAbsoluteUrl(); } @@ -249,8 +262,9 @@ namespace Azure { namespace Storage { namespace Sas { + userDelegationKey.SignedTenantId + "\n" + signedStartsOnStr + "\n" + signedExpiresOnStr + "\n" + userDelegationKey.SignedService + "\n" + userDelegationKey.SignedVersion + "\n\n\n\n" + (IPRange.HasValue() ? IPRange.Value() : "") + "\n" + protocol + "\n" - + SasVersion + "\n" + resource + "\n" + snapshotVersion + "\n" + CacheControl + "\n" - + ContentDisposition + "\n" + ContentEncoding + "\n" + ContentLanguage + "\n" + ContentType; + + SasVersion + "\n" + resource + "\n" + snapshotVersion + "\n" + EncryptionScope + "\n" + + CacheControl + "\n" + ContentDisposition + "\n" + ContentEncoding + "\n" + ContentLanguage + + "\n" + ContentType; std::string signature = Azure::Core::Convert::Base64Encode(_internal::HmacSha256( std::vector(stringToSign.begin(), stringToSign.end()), @@ -300,6 +314,10 @@ namespace Azure { namespace Storage { namespace Sas { { builder.AppendQueryParameter("rsct", _internal::UrlEncodeQueryParameter(ContentType)); } + if (!EncryptionScope.empty()) + { + builder.AppendQueryParameter("ses", _internal::UrlEncodeQueryParameter(EncryptionScope)); + } builder.AppendQueryParameter("sig", _internal::UrlEncodeQueryParameter(signature)); return builder.GetAbsoluteUrl(); diff --git a/sdk/storage/azure-storage-blobs/src/block_blob_client.cpp b/sdk/storage/azure-storage-blobs/src/block_blob_client.cpp index 9e14727dfd..9aefdafc0e 100644 --- a/sdk/storage/azure-storage-blobs/src/block_blob_client.cpp +++ b/sdk/storage/azure-storage-blobs/src/block_blob_client.cpp @@ -378,6 +378,7 @@ namespace Azure { namespace Storage { namespace Blobs { protocolLayerOptions.EncryptionAlgorithm = m_customerProvidedKey.Value().Algorithm.ToString(); } protocolLayerOptions.EncryptionScope = m_encryptionScope; + protocolLayerOptions.CopySourceTags = options.CopySourceTagsMode; return _detail::BlockBlobClient::UploadFromUri( *m_pipeline, m_blobUrl, protocolLayerOptions, context); } diff --git a/sdk/storage/azure-storage-blobs/src/rest_client.cpp b/sdk/storage/azure-storage-blobs/src/rest_client.cpp index 4fdcad2249..1678ac9b72 100644 --- a/sdk/storage/azure-storage-blobs/src/rest_client.cpp +++ b/sdk/storage/azure-storage-blobs/src/rest_client.cpp @@ -170,6 +170,8 @@ namespace Azure { namespace Storage { namespace Blobs { "RelativeToCreation"); const ScheduleBlobExpiryOriginType ScheduleBlobExpiryOriginType::RelativeToNow("RelativeToNow"); const ScheduleBlobExpiryOriginType ScheduleBlobExpiryOriginType::Absolute("Absolute"); + const BlobCopySourceTagsMode BlobCopySourceTagsMode::Replace("REPLACE"); + const BlobCopySourceTagsMode BlobCopySourceTagsMode::Copy("COPY"); namespace _detail { const QueryRequestQueryType QueryRequestQueryType::SQL("SQL"); const QueryFormatType QueryFormatType::Delimited("delimited"); @@ -374,7 +376,7 @@ namespace Azure { namespace Storage { namespace Blobs { request.SetHeader("Content-Length", std::to_string(requestBody.Length())); request.GetUrl().AppendQueryParameter("restype", "service"); request.GetUrl().AppendQueryParameter("comp", "properties"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Accepted) @@ -394,7 +396,7 @@ namespace Azure { namespace Storage { namespace Blobs { auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url); request.GetUrl().AppendQueryParameter("restype", "service"); request.GetUrl().AppendQueryParameter("comp", "properties"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); (void)options; auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); @@ -690,7 +692,7 @@ namespace Azure { namespace Storage { namespace Blobs { auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url); request.GetUrl().AppendQueryParameter("restype", "service"); request.GetUrl().AppendQueryParameter("comp", "stats"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); (void)options; auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); @@ -790,7 +792,7 @@ namespace Azure { namespace Storage { namespace Blobs { _internal::UrlEncodeQueryParameter( ListBlobContainersIncludeFlagsToString(options.Include.Value()))); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -1075,7 +1077,7 @@ namespace Azure { namespace Storage { namespace Blobs { request.SetHeader("Content-Length", std::to_string(requestBody.Length())); request.GetUrl().AppendQueryParameter("restype", "service"); request.GetUrl().AppendQueryParameter("comp", "userdelegationkey"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -1190,7 +1192,7 @@ namespace Azure { namespace Storage { namespace Blobs { auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url); request.GetUrl().AppendQueryParameter("restype", "account"); request.GetUrl().AppendQueryParameter("comp", "properties"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); (void)options; auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); @@ -1220,7 +1222,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("Content-Type", options.MultipartContentType); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Accepted) @@ -1241,7 +1243,7 @@ namespace Azure { namespace Storage { namespace Blobs { { auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url); request.GetUrl().AppendQueryParameter("comp", "blobs"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.Where.HasValue() && !options.Where.Value().empty()) { request.GetUrl().AppendQueryParameter( @@ -1397,7 +1399,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-blob-public-access", options.Access.ToString()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.DefaultEncryptionScope.HasValue() && !options.DefaultEncryptionScope.Value().empty()) { @@ -1434,7 +1436,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-lease-id", options.LeaseId.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -1512,7 +1514,7 @@ namespace Azure { namespace Storage { namespace Blobs { "If-Unmodified-Since", options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123)); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Accepted) @@ -1546,7 +1548,7 @@ namespace Azure { namespace Storage { namespace Blobs { "If-Modified-Since", options.IfModifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123)); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -1573,7 +1575,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-lease-id", options.LeaseId.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -1742,7 +1744,7 @@ namespace Azure { namespace Storage { namespace Blobs { "If-Unmodified-Since", options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123)); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -1765,7 +1767,7 @@ namespace Azure { namespace Storage { namespace Blobs { auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url); request.GetUrl().AppendQueryParameter("restype", "container"); request.GetUrl().AppendQueryParameter("comp", "undelete"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.DeletedContainerName.HasValue() && !options.DeletedContainerName.Value().empty()) { request.SetHeader("x-ms-deleted-container-name", options.DeletedContainerName.Value()); @@ -1795,7 +1797,7 @@ namespace Azure { namespace Storage { namespace Blobs { auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url); request.GetUrl().AppendQueryParameter("restype", "container"); request.GetUrl().AppendQueryParameter("comp", "rename"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (!options.SourceContainerName.empty()) { request.SetHeader("x-ms-source-container-name", options.SourceContainerName); @@ -1829,7 +1831,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("Content-Type", options.MultipartContentType); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Accepted) @@ -1842,6 +1844,155 @@ namespace Azure { namespace Storage { namespace Blobs { return Response( std::move(response), std::move(pRawResponse)); } + Response BlobContainerClient::FindBlobsByTags( + Core::Http::_internal::HttpPipeline& pipeline, + const Core::Url& url, + const FindBlobContainerBlobsByTagsOptions& options, + const Core::Context& context) + { + auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url); + request.GetUrl().AppendQueryParameter("restype", "container"); + request.GetUrl().AppendQueryParameter("comp", "blobs"); + request.SetHeader("x-ms-version", "2021-04-10"); + if (options.Where.HasValue() && !options.Where.Value().empty()) + { + request.GetUrl().AppendQueryParameter( + "where", _internal::UrlEncodeQueryParameter(options.Where.Value())); + } + if (options.Marker.HasValue() && !options.Marker.Value().empty()) + { + request.GetUrl().AppendQueryParameter( + "marker", _internal::UrlEncodeQueryParameter(options.Marker.Value())); + } + if (options.MaxResults.HasValue()) + { + request.GetUrl().AppendQueryParameter( + "maxresults", std::to_string(options.MaxResults.Value())); + } + auto pRawResponse = pipeline.Send(request, context); + auto httpStatusCode = pRawResponse->GetStatusCode(); + if (httpStatusCode != Core::Http::HttpStatusCode::Ok) + { + throw StorageException::CreateFromResponse(std::move(pRawResponse)); + } + Models::_detail::FindBlobsByTagsResult response; + { + const auto& responseBody = pRawResponse->GetBody(); + _internal::XmlReader reader( + reinterpret_cast(responseBody.data()), responseBody.size()); + enum class XmlTagEnum + { + kUnknown, + kEnumerationResults, + kBlobs, + kBlob, + kName, + kContainerName, + kTags, + kTagSet, + kTag, + kKey, + kValue, + kNextMarker, + }; + const std::unordered_map XmlTagEnumMap{ + {"EnumerationResults", XmlTagEnum::kEnumerationResults}, + {"Blobs", XmlTagEnum::kBlobs}, + {"Blob", XmlTagEnum::kBlob}, + {"Name", XmlTagEnum::kName}, + {"ContainerName", XmlTagEnum::kContainerName}, + {"Tags", XmlTagEnum::kTags}, + {"TagSet", XmlTagEnum::kTagSet}, + {"Tag", XmlTagEnum::kTag}, + {"Key", XmlTagEnum::kKey}, + {"Value", XmlTagEnum::kValue}, + {"NextMarker", XmlTagEnum::kNextMarker}, + }; + std::vector xmlPath; + Models::TaggedBlobItem vectorElement1; + std::string mapKey2; + std::string mapValue3; + while (true) + { + auto node = reader.Read(); + if (node.Type == _internal::XmlNodeType::End) + { + break; + } + else if (node.Type == _internal::XmlNodeType::StartTag) + { + auto ite = XmlTagEnumMap.find(node.Name); + xmlPath.push_back(ite == XmlTagEnumMap.end() ? XmlTagEnum::kUnknown : ite->second); + } + else if (node.Type == _internal::XmlNodeType::Text) + { + if (xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults + && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob + && xmlPath[3] == XmlTagEnum::kName) + { + vectorElement1.BlobName = node.Value; + } + else if ( + xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults + && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob + && xmlPath[3] == XmlTagEnum::kContainerName) + { + vectorElement1.BlobContainerName = node.Value; + } + else if ( + xmlPath.size() == 7 && xmlPath[0] == XmlTagEnum::kEnumerationResults + && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob + && xmlPath[3] == XmlTagEnum::kTags && xmlPath[4] == XmlTagEnum::kTagSet + && xmlPath[5] == XmlTagEnum::kTag && xmlPath[6] == XmlTagEnum::kKey) + { + mapKey2 = node.Value; + } + else if ( + xmlPath.size() == 7 && xmlPath[0] == XmlTagEnum::kEnumerationResults + && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob + && xmlPath[3] == XmlTagEnum::kTags && xmlPath[4] == XmlTagEnum::kTagSet + && xmlPath[5] == XmlTagEnum::kTag && xmlPath[6] == XmlTagEnum::kValue) + { + mapValue3 = node.Value; + } + else if ( + xmlPath.size() == 2 && xmlPath[0] == XmlTagEnum::kEnumerationResults + && xmlPath[1] == XmlTagEnum::kNextMarker) + { + response.ContinuationToken = node.Value; + } + } + else if (node.Type == _internal::XmlNodeType::Attribute) + { + if (xmlPath.size() == 1 && xmlPath[0] == XmlTagEnum::kEnumerationResults + && node.Name == "ServiceEndpoint") + { + response.ServiceEndpoint = node.Value; + } + } + else if (node.Type == _internal::XmlNodeType::EndTag) + { + if (xmlPath.size() == 7 && xmlPath[0] == XmlTagEnum::kEnumerationResults + && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob + && xmlPath[3] == XmlTagEnum::kTags && xmlPath[4] == XmlTagEnum::kTagSet + && xmlPath[5] == XmlTagEnum::kTag && xmlPath[6] == XmlTagEnum::kValue) + { + vectorElement1.Tags[std::move(mapKey2)] = std::move(mapValue3); + } + else if ( + xmlPath.size() == 3 && xmlPath[0] == XmlTagEnum::kEnumerationResults + && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob) + { + response.Items.push_back(std::move(vectorElement1)); + vectorElement1 = Models::TaggedBlobItem(); + } + xmlPath.pop_back(); + } + } + } + return Response( + std::move(response), std::move(pRawResponse)); + } Response BlobContainerClient::AcquireLease( Core::Http::_internal::HttpPipeline& pipeline, const Core::Url& url, @@ -1872,7 +2023,7 @@ namespace Azure { namespace Storage { namespace Blobs { "If-Unmodified-Since", options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123)); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Created) @@ -1913,7 +2064,7 @@ namespace Azure { namespace Storage { namespace Blobs { "If-Unmodified-Since", options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123)); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -1953,7 +2104,7 @@ namespace Azure { namespace Storage { namespace Blobs { "If-Unmodified-Since", options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123)); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -1994,7 +2145,7 @@ namespace Azure { namespace Storage { namespace Blobs { "If-Unmodified-Since", options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123)); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Accepted) @@ -2039,7 +2190,7 @@ namespace Azure { namespace Storage { namespace Blobs { "If-Unmodified-Since", options.IfUnmodifiedSince.Value().ToString(Azure::DateTime::DateFormat::Rfc1123)); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -2086,7 +2237,7 @@ namespace Azure { namespace Storage { namespace Blobs { _internal::UrlEncodeQueryParameter( ListBlobsIncludeFlagsToString(options.Include.Value()))); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -2221,7 +2372,7 @@ namespace Azure { namespace Storage { namespace Blobs { {"BlobType", XmlTagEnum::kBlobType}, }; std::vector xmlPath; - Models::BlobItem vectorElement1; + Models::_detail::BlobItem vectorElement1; std::string mapKey2; std::string mapValue3; std::string mapKey4; @@ -2285,7 +2436,7 @@ namespace Azure { namespace Storage { namespace Blobs { && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob && xmlPath[3] == XmlTagEnum::kName) { - vectorElement1.Name = node.Value; + vectorElement1.Name.Content = node.Value; } else if ( xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults @@ -2670,6 +2821,13 @@ namespace Azure { namespace Storage { namespace Blobs { { response.BlobContainerName = node.Value; } + else if ( + xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults + && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob + && xmlPath[3] == XmlTagEnum::kName && node.Name == "Encoded") + { + vectorElement1.Name.Encoded = node.Value == std::string("true"); + } } else if (node.Type == _internal::XmlNodeType::EndTag) { @@ -2703,7 +2861,7 @@ namespace Azure { namespace Storage { namespace Blobs { && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob) { response.Items.push_back(std::move(vectorElement1)); - vectorElement1 = Models::BlobItem(); + vectorElement1 = Models::_detail::BlobItem(); } xmlPath.pop_back(); } @@ -2749,7 +2907,7 @@ namespace Azure { namespace Storage { namespace Blobs { _internal::UrlEncodeQueryParameter( ListBlobsIncludeFlagsToString(options.Include.Value()))); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -2888,14 +3046,14 @@ namespace Azure { namespace Storage { namespace Blobs { {"BlobPrefix", XmlTagEnum::kBlobPrefix}, }; std::vector xmlPath; - Models::BlobItem vectorElement1; + Models::_detail::BlobItem vectorElement1; std::string mapKey2; std::string mapValue3; std::string mapKey4; std::string mapValue5; Models::ObjectReplicationPolicy vectorElement6; Models::ObjectReplicationRule vectorElement7; - std::string vectorElement8; + Models::_detail::BlobName vectorElement8; while (true) { auto node = reader.Read(); @@ -2959,7 +3117,7 @@ namespace Azure { namespace Storage { namespace Blobs { && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob && xmlPath[3] == XmlTagEnum::kName) { - vectorElement1.Name = node.Value; + vectorElement1.Name.Content = node.Value; } else if ( xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults @@ -3335,7 +3493,7 @@ namespace Azure { namespace Storage { namespace Blobs { && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlobPrefix && xmlPath[3] == XmlTagEnum::kName) { - vectorElement8 = node.Value; + vectorElement8.Content = node.Value; } } else if (node.Type == _internal::XmlNodeType::Attribute) @@ -3351,6 +3509,20 @@ namespace Azure { namespace Storage { namespace Blobs { { response.BlobContainerName = node.Value; } + else if ( + xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults + && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob + && xmlPath[3] == XmlTagEnum::kName && node.Name == "Encoded") + { + vectorElement1.Name.Encoded = node.Value == std::string("true"); + } + else if ( + xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults + && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlobPrefix + && xmlPath[3] == XmlTagEnum::kName && node.Name == "Encoded") + { + vectorElement8.Encoded = node.Value == std::string("true"); + } } else if (node.Type == _internal::XmlNodeType::EndTag) { @@ -3384,7 +3556,7 @@ namespace Azure { namespace Storage { namespace Blobs { && xmlPath[1] == XmlTagEnum::kBlobs && xmlPath[2] == XmlTagEnum::kBlob) { response.Items.push_back(std::move(vectorElement1)); - vectorElement1 = Models::BlobItem(); + vectorElement1 = Models::_detail::BlobItem(); } else if ( xmlPath.size() == 4 && xmlPath[0] == XmlTagEnum::kEnumerationResults @@ -3392,7 +3564,7 @@ namespace Azure { namespace Storage { namespace Blobs { && xmlPath[3] == XmlTagEnum::kName) { response.BlobPrefixes.push_back(std::move(vectorElement8)); - vectorElement8 = std::string(); + vectorElement8 = Models::_detail::BlobName(); } xmlPath.pop_back(); } @@ -3476,7 +3648,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (!(httpStatusCode == Core::Http::HttpStatusCode::Ok @@ -3486,8 +3658,11 @@ namespace Azure { namespace Storage { namespace Blobs { } Models::DownloadBlobResult response; response.BodyStream = pRawResponse->ExtractBodyStream(); - response.Details.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.Details.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } for (auto i = pRawResponse->GetHeaders().lower_bound("x-ms-meta-"); i != pRawResponse->GetHeaders().end() && i->first.substr(0, 10) == "x-ms-meta-"; ++i) @@ -3503,7 +3678,10 @@ namespace Azure { namespace Storage { namespace Blobs { { response.Details.HttpHeaders.ContentType = pRawResponse->GetHeaders().at("Content-Type"); } - response.Details.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.Details.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } if (pRawResponse->GetHeaders().count("Content-Encoding") != 0) { response.Details.HttpHeaders.ContentEncoding @@ -3746,7 +3924,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -3754,8 +3932,11 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::BlobProperties response; - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } response.CreatedOn = DateTime::Parse( pRawResponse->GetHeaders().at("x-ms-creation-time"), Azure::DateTime::DateFormat::Rfc1123); @@ -3827,7 +4008,10 @@ namespace Azure { namespace Storage { namespace Blobs { { response.HttpHeaders.ContentType = pRawResponse->GetHeaders().at("Content-Type"); } - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } if (pRawResponse->GetHeaders().count("Content-MD5") != 0) { response.HttpHeaders.ContentHash.Value @@ -4002,7 +4186,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Accepted) @@ -4020,7 +4204,7 @@ namespace Azure { namespace Storage { namespace Blobs { { auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url); request.GetUrl().AppendQueryParameter("comp", "undelete"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); (void)options; auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); @@ -4039,7 +4223,7 @@ namespace Azure { namespace Storage { namespace Blobs { { auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url); request.GetUrl().AppendQueryParameter("comp", "expiry"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (!options.ExpiryOptions.ToString().empty()) { request.SetHeader("x-ms-expiry-option", options.ExpiryOptions.ToString()); @@ -4055,9 +4239,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::SetBlobExpiryResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } return Response(std::move(response), std::move(pRawResponse)); } Response BlobClient::SetHttpHeaders( @@ -4121,7 +4311,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-blob-content-disposition", options.BlobContentDisposition); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -4129,9 +4319,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::SetBlobHttpHeadersResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } if (pRawResponse->GetHeaders().count("x-ms-blob-sequence-number") != 0) { response.SequenceNumber @@ -4148,7 +4344,7 @@ namespace Azure { namespace Storage { namespace Blobs { { auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url); request.GetUrl().AppendQueryParameter("comp", "immutabilityPolicies"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.IfUnmodifiedSince.HasValue()) { request.SetHeader( @@ -4191,7 +4387,7 @@ namespace Azure { namespace Storage { namespace Blobs { { auto request = Core::Http::Request(Core::Http::HttpMethod::Delete, url); request.GetUrl().AppendQueryParameter("comp", "immutabilityPolicies"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); (void)options; auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); @@ -4211,7 +4407,7 @@ namespace Azure { namespace Storage { namespace Blobs { { auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url); request.GetUrl().AppendQueryParameter("comp", "legalhold"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); request.SetHeader("x-ms-legal-hold", options.LegalHold ? "true" : "false"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); @@ -4283,7 +4479,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -4291,9 +4487,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::SetBlobMetadataResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } if (pRawResponse->GetHeaders().count("x-ms-version-id") != 0) { response.VersionId = pRawResponse->GetHeaders().at("x-ms-version-id"); @@ -4352,7 +4554,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Created) @@ -4360,9 +4562,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::_detail::AcquireBlobLeaseResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } response.LeaseId = pRawResponse->GetHeaders().at("x-ms-lease-id"); return Response( std::move(response), std::move(pRawResponse)); @@ -4404,7 +4612,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -4412,9 +4620,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::_detail::ReleaseBlobLeaseResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } return Response( std::move(response), std::move(pRawResponse)); } @@ -4455,7 +4669,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -4463,9 +4677,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::_detail::RenewBlobLeaseResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } response.LeaseId = pRawResponse->GetHeaders().at("x-ms-lease-id"); return Response( std::move(response), std::move(pRawResponse)); @@ -4511,7 +4731,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -4519,9 +4739,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::_detail::ChangeBlobLeaseResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } response.LeaseId = pRawResponse->GetHeaders().at("x-ms-lease-id"); return Response( std::move(response), std::move(pRawResponse)); @@ -4563,7 +4789,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Accepted) @@ -4571,9 +4797,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::_detail::BreakBlobLeaseResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } response.LeaseTime = std::stoi(pRawResponse->GetHeaders().at("x-ms-lease-time")); return Response( std::move(response), std::move(pRawResponse)); @@ -4637,7 +4869,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-lease-id", options.LeaseId.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Created) @@ -4646,9 +4878,15 @@ namespace Azure { namespace Storage { namespace Blobs { } Models::CreateBlobSnapshotResult response; response.Snapshot = pRawResponse->GetHeaders().at("x-ms-snapshot"); - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } if (pRawResponse->GetHeaders().count("x-ms-version-id") != 0) { response.VersionId = pRawResponse->GetHeaders().at("x-ms-version-id"); @@ -4738,7 +4976,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-lease-id", options.LeaseId.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.BlobTagsString.HasValue() && !options.BlobTagsString.Value().empty()) { request.SetHeader("x-ms-tags", options.BlobTagsString.Value()); @@ -4771,9 +5009,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::_detail::StartBlobCopyFromUriResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } if (pRawResponse->GetHeaders().count("x-ms-version-id") != 0) { response.VersionId = pRawResponse->GetHeaders().at("x-ms-version-id"); @@ -4851,7 +5095,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-lease-id", options.LeaseId.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.SourceContentMD5.HasValue() && !Core::Convert::Base64Encode(options.SourceContentMD5.Value()).empty()) { @@ -4886,6 +5130,14 @@ namespace Azure { namespace Storage { namespace Blobs { request.SetHeader( "x-ms-copy-source-authorization", options.CopySourceAuthorization.Value()); } + if (options.EncryptionScope.HasValue() && !options.EncryptionScope.Value().empty()) + { + request.SetHeader("x-ms-encryption-scope", options.EncryptionScope.Value()); + } + if (options.CopySourceTags.HasValue() && !options.CopySourceTags.Value().ToString().empty()) + { + request.SetHeader("x-ms-copy-source-tag-option", options.CopySourceTags.Value().ToString()); + } if (options.SourceContentcrc64.HasValue() && !Core::Convert::Base64Encode(options.SourceContentcrc64.Value()).empty()) { @@ -4900,9 +5152,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::CopyBlobFromUriResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } if (pRawResponse->GetHeaders().count("x-ms-version-id") != 0) { response.VersionId = pRawResponse->GetHeaders().at("x-ms-version-id"); @@ -4923,6 +5181,10 @@ namespace Azure { namespace Storage { namespace Blobs { = Core::Convert::Base64Decode(pRawResponse->GetHeaders().at("x-ms-content-crc64")); response.TransactionalContentHash.Value().Algorithm = HashAlgorithm::Crc64; } + if (pRawResponse->GetHeaders().count("x-ms-encryption-scope") != 0) + { + response.EncryptionScope = pRawResponse->GetHeaders().at("x-ms-encryption-scope"); + } return Response(std::move(response), std::move(pRawResponse)); } Response BlobClient::AbortCopyFromUri( @@ -4943,7 +5205,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-lease-id", options.LeaseId.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::NoContent) @@ -4981,7 +5243,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-rehydrate-priority", options.RehydratePriority.Value().ToString()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty()) { request.SetHeader("x-ms-lease-id", options.LeaseId.Value()); @@ -5283,7 +5545,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.EncryptionScope.HasValue() && !options.EncryptionScope.Value().empty()) { request.SetHeader("x-ms-encryption-scope", options.EncryptionScope.Value()); @@ -5297,9 +5559,15 @@ namespace Azure { namespace Storage { namespace Blobs { } Models::QueryBlobResult response; response.BodyStream = pRawResponse->ExtractBodyStream(); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } if (pRawResponse->GetHeaders().count("x-ms-lease-duration") != 0) { response.LeaseDuration @@ -5320,7 +5588,7 @@ namespace Azure { namespace Storage { namespace Blobs { { auto request = Core::Http::Request(Core::Http::HttpMethod::Get, url); request.GetUrl().AppendQueryParameter("comp", "tags"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.Snapshot.HasValue() && !options.Snapshot.Value().empty()) { request.GetUrl().AppendQueryParameter( @@ -5447,7 +5715,7 @@ namespace Azure { namespace Storage { namespace Blobs { request.SetHeader("Content-Type", "application/xml; charset=UTF-8"); request.SetHeader("Content-Length", std::to_string(requestBody.Length())); request.GetUrl().AppendQueryParameter("comp", "tags"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.VersionId.HasValue() && !options.VersionId.Value().empty()) { request.GetUrl().AppendQueryParameter( @@ -5578,7 +5846,7 @@ namespace Azure { namespace Storage { namespace Blobs { request.SetHeader( "x-ms-blob-sequence-number", std::to_string(options.BlobSequenceNumber.Value())); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.BlobTagsString.HasValue() && !options.BlobTagsString.Value().empty()) { request.SetHeader("x-ms-tags", options.BlobTagsString.Value()); @@ -5607,9 +5875,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::CreatePageBlobResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } if (pRawResponse->GetHeaders().count("x-ms-version-id") != 0) { response.VersionId = pRawResponse->GetHeaders().at("x-ms-version-id"); @@ -5718,7 +5992,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Created) @@ -5726,9 +6000,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::UploadPagesResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } if (pRawResponse->GetHeaders().count("Content-MD5") != 0) { response.TransactionalContentHash = ContentHash(); @@ -5835,7 +6115,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Created) @@ -5843,9 +6123,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::ClearPagesResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } response.SequenceNumber = std::stoll(pRawResponse->GetHeaders().at("x-ms-blob-sequence-number")); return Response(std::move(response), std::move(pRawResponse)); @@ -5969,7 +6255,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-source-if-none-match", options.SourceIfNoneMatch.ToString()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.CopySourceAuthorization.HasValue() && !options.CopySourceAuthorization.Value().empty()) { @@ -5983,9 +6269,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::UploadPagesFromUriResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } if (pRawResponse->GetHeaders().count("Content-MD5") != 0) { response.TransactionalContentHash = ContentHash(); @@ -6061,7 +6353,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.Marker.HasValue() && !options.Marker.Value().empty()) { request.GetUrl().AppendQueryParameter( @@ -6172,9 +6464,15 @@ namespace Azure { namespace Storage { namespace Blobs { } } } - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } response.BlobSize = std::stoll(pRawResponse->GetHeaders().at("x-ms-blob-content-length")); return Response( std::move(response), std::move(pRawResponse)); @@ -6233,7 +6531,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.Marker.HasValue() && !options.Marker.Value().empty()) { request.GetUrl().AppendQueryParameter( @@ -6344,9 +6642,15 @@ namespace Azure { namespace Storage { namespace Blobs { } } } - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } response.BlobSize = std::stoll(pRawResponse->GetHeaders().at("x-ms-blob-content-length")); return Response( std::move(response), std::move(pRawResponse)); @@ -6407,7 +6711,7 @@ namespace Azure { namespace Storage { namespace Blobs { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } request.SetHeader("x-ms-blob-content-length", std::to_string(options.BlobContentLength)); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -6415,9 +6719,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::ResizePageBlobResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } response.SequenceNumber = std::stoll(pRawResponse->GetHeaders().at("x-ms-blob-sequence-number")); return Response(std::move(response), std::move(pRawResponse)); @@ -6467,7 +6777,7 @@ namespace Azure { namespace Storage { namespace Blobs { request.SetHeader( "x-ms-blob-sequence-number", std::to_string(options.BlobSequenceNumber.Value())); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) @@ -6475,9 +6785,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::UpdateSequenceNumberResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } response.SequenceNumber = std::stoll(pRawResponse->GetHeaders().at("x-ms-blob-sequence-number")); return Response( @@ -6519,7 +6835,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-copy-source", options.CopySource); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Accepted) @@ -6527,9 +6843,15 @@ namespace Azure { namespace Storage { namespace Blobs { throw StorageException::CreateFromResponse(std::move(pRawResponse)); } Models::_detail::StartBlobCopyIncrementalResult response; - response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); - response.LastModified = DateTime::Parse( - pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + if (pRawResponse->GetHeaders().count("ETag") != 0) + { + response.ETag = ETag(pRawResponse->GetHeaders().at("ETag")); + } + if (pRawResponse->GetHeaders().count("Last-Modified") != 0) + { + response.LastModified = DateTime::Parse( + pRawResponse->GetHeaders().at("Last-Modified"), Azure::DateTime::DateFormat::Rfc1123); + } response.CopyId = pRawResponse->GetHeaders().at("x-ms-copy-id"); response.CopyStatus = Models::CopyStatus(pRawResponse->GetHeaders().at("x-ms-copy-status")); if (pRawResponse->GetHeaders().count("x-ms-version-id") != 0) @@ -6624,7 +6946,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.BlobTagsString.HasValue() && !options.BlobTagsString.Value().empty()) { request.SetHeader("x-ms-tags", options.BlobTagsString.Value()); @@ -6752,7 +7074,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Created) @@ -6906,7 +7228,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-source-if-none-match", options.SourceIfNoneMatch.ToString()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.CopySourceAuthorization.HasValue() && !options.CopySourceAuthorization.Value().empty()) { @@ -6962,7 +7284,7 @@ namespace Azure { namespace Storage { namespace Blobs { { auto request = Core::Http::Request(Core::Http::HttpMethod::Put, url); request.GetUrl().AppendQueryParameter("comp", "seal"); - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.LeaseId.HasValue() && !options.LeaseId.Value().empty()) { request.SetHeader("x-ms-lease-id", options.LeaseId.Value()); @@ -7101,7 +7423,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.BlobTagsString.HasValue() && !options.BlobTagsString.Value().empty()) { request.SetHeader("x-ms-tags", options.BlobTagsString.Value()); @@ -7284,7 +7606,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-source-if-tags", options.SourceIfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.SourceContentMD5.HasValue() && !Core::Convert::Base64Encode(options.SourceContentMD5.Value()).empty()) { @@ -7312,6 +7634,10 @@ namespace Azure { namespace Storage { namespace Blobs { request.SetHeader( "x-ms-copy-source-authorization", options.CopySourceAuthorization.Value()); } + if (options.CopySourceTags.HasValue() && !options.CopySourceTags.Value().ToString().empty()) + { + request.SetHeader("x-ms-copy-source-tag-option", options.CopySourceTags.Value().ToString()); + } if (options.SourceContentcrc64.HasValue() && !Core::Convert::Base64Encode(options.SourceContentcrc64.Value()).empty()) { @@ -7412,7 +7738,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-encryption-scope", options.EncryptionScope.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Created) @@ -7526,7 +7852,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-source-if-none-match", options.SourceIfNoneMatch.ToString()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.CopySourceAuthorization.HasValue() && !options.CopySourceAuthorization.Value().empty()) { @@ -7693,7 +8019,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); if (options.BlobTagsString.HasValue() && !options.BlobTagsString.Value().empty()) { request.SetHeader("x-ms-tags", options.BlobTagsString.Value()); @@ -7782,7 +8108,7 @@ namespace Azure { namespace Storage { namespace Blobs { { request.SetHeader("x-ms-if-tags", options.IfTags.Value()); } - request.SetHeader("x-ms-version", "2020-10-02"); + request.SetHeader("x-ms-version", "2021-04-10"); auto pRawResponse = pipeline.Send(request, context); auto httpStatusCode = pRawResponse->GetStatusCode(); if (httpStatusCode != Core::Http::HttpStatusCode::Ok) diff --git a/sdk/storage/azure-storage-blobs/swagger/README.md b/sdk/storage/azure-storage-blobs/swagger/README.md index 2a31bd673f..2b34011ca2 100644 --- a/sdk/storage/azure-storage-blobs/swagger/README.md +++ b/sdk/storage/azure-storage-blobs/swagger/README.md @@ -9,7 +9,7 @@ package-name: azure-storage-blobs namespace: Azure::Storage::Blobs output-folder: generated clear-output-folder: true -input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/storage/data-plane/Microsoft.BlobStorage/preview/2020-10-02/blob.json +input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/storage/data-plane/Microsoft.BlobStorage/preview/2021-04-10/blob.json ``` ## ModelFour Options @@ -102,7 +102,7 @@ directive: "name": "ApiVersion", "modelAsString": false }, - "enum": ["2020-10-02"], + "enum": ["2021-04-10"], "description": "The version used for the operations to Azure storage services." }; ``` @@ -116,6 +116,7 @@ directive: transform: > $["/?comp=list"].get.operationId = "Service_ListBlobContainers"; $["/?comp=blobs"].get.operationId = "Service_FindBlobsByTags"; + $["/{containerName}?restype=container&comp=blobs"].get.operationId = "BlobContainer_FindBlobsByTags"; $["/{containerName}/{blob}?comp=incrementalcopy"].put.operationId = "PageBlob_StartCopyIncremental"; $["/{containerName}?restype=container&comp=list&flat"].get.operationId = "BlobContainer_ListBlobs"; $["/{containerName}?restype=container&comp=list&hierarchy"].get.operationId = "BlobContainer_ListBlobsByHierarchy"; @@ -279,6 +280,7 @@ directive: delete $.EncryptionAlgorithm["enum"]; delete $.EncryptionAlgorithm["x-ms-enum"]; $.ImmutabilityPolicyMode.enum = $.ImmutabilityPolicyMode.enum.map(e => e.toLowerCase()); + $.CopySourceTags["x-ms-enum"]["name"] = "BlobCopySourceTagsMode"; - from: swagger-document where: $.definitions transform: > @@ -467,6 +469,54 @@ directive: $.ArchiveStatus.description = "For blob storage LRS accounts, valid values are rehydrate-pending-to-hot/rehydrate-pending-to-cool. If the blob is being rehydrated and is not complete then this value indicates that rehydrate is pending and also tells the destination tier."; ``` +### Striped Blob Support + +```yaml +directive: + - from: swagger-document + where: $ + transform: > + const operations = [ + "Blob_GetProperties", + "Blob_Download", + "Blob_SetExpiry", + "Blob_SetHTTPHeaders", + "Blob_SetMetadata", + "Blob_AcquireLease", + "Blob_ReleaseLease", + "Blob_RenewLease", + "Blob_ChangeLease", + "Blob_BreakLease", + "Blob_CreateSnapshot", + "Blob_StartCopyFromUri", + "Blob_CopyFromUri", + "Blob_Query", + "PageBlob_Create", + "PageBlob_UploadPages", + "PageBlob_ClearPages", + "PageBlob_UploadPagesFromUri", + "PageBlob_GetPageRanges", + "PageBlob_GetPageRangesDiff", + "PageBlob_Resize", + "PageBlob_UpdateSequenceNumber", + "PageBlob_StartCopyIncremental", + ]; + for (const url in $["x-ms-paths"]) { + for (const verb in $["x-ms-paths"][url]) { + if (!operations.includes($["x-ms-paths"][url][verb].operationId)) continue; + const operation = $["x-ms-paths"][url][verb]; + + const status_codes = Object.keys(operation.responses).filter(s => s !== "default"); + status_codes.forEach((status_code, i) => { + operation.responses[status_code].headers["Last-Modified"]["x-ms-client-default"] = ""; + operation.responses[status_code].headers["Last-Modified"]["x-nullable"] = true; + operation.responses[status_code].headers["ETag"]["x-ms-client-default"] = ""; + operation.responses[status_code].headers["ETag"]["x-nullable"] = true; + }); + } + } +``` + ### GetBlobServiceProperties ```yaml @@ -745,7 +795,12 @@ directive: delete $.ListBlobsFlatSegmentResponse.required; $.ListBlobsFlatSegmentResponse.properties["NextMarker"]["x-nullable"] = true; + $.BlobName["x-namespace"] = "_detail"; + delete $.BlobName.properties["content"]["xml"]; + $.BlobName["xml"] = {"name": "Name"}; + $.BlobName.properties["content"]["x-ms-xml"] = {"name": "."}; $.BlobItemInternal["x-ms-client-name"] = "BlobItem"; + $.BlobItemInternal["x-namespace"] = "_detail"; $.BlobItemInternal.properties["Deleted"]["x-ms-client-name"] = "IsDeleted"; $.BlobItemInternal.properties["Properties"]["x-ms-client-name"] = "Details"; $.BlobItemInternal.properties["BlobSize"] = $.BlobPropertiesInternal.properties["Content-Length"]; @@ -835,7 +890,7 @@ directive: $.ListBlobsHierarchySegmentResponse.properties["NextMarker"]["x-ms-client-name"] = "ContinuationToken"; $.ListBlobsHierarchySegmentResponse.properties["Blobs"] = $.ListBlobsFlatSegmentResponse.properties["Blobs"]; $.ListBlobsHierarchySegmentResponse.properties["Blobs"]["x-ms-client-name"] = "Items"; - $.ListBlobsHierarchySegmentResponse.properties["BlobPrefixes"] = {"type": "array", "items": {"type": "string", "xml": {"name": "Name"}}, "x-ms-xml": {"wrapped": true, "name": "Blobs/BlobPrefix"}}; + $.ListBlobsHierarchySegmentResponse.properties["BlobPrefixes"] = {"type": "array", "items": {"$ref": "#/definitions/BlobName"}, "x-ms-xml": {"wrapped": true, "name": "Blobs/BlobPrefix"}}; delete $.ListBlobsHierarchySegmentResponse.properties["Marker"]; delete $.ListBlobsHierarchySegmentResponse.properties["MaxResults"]; delete $.ListBlobsHierarchySegmentResponse.properties["Segment"]; @@ -1163,6 +1218,7 @@ directive: $["Content-MD5"]["x-nullable"] = true; $["x-ms-content-crc64"]["x-ms-client-name"] = "TransactionalContentHash"; $["x-ms-content-crc64"]["x-nullable"] = true; + $["x-ms-encryption-scope"]["x-nullable"] = true; ``` ### QueryBlobContent diff --git a/sdk/storage/azure-storage-blobs/test/ut/blob_container_client_test.cpp b/sdk/storage/azure-storage-blobs/test/ut/blob_container_client_test.cpp index deb79a8728..9017f6f18f 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/blob_container_client_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/ut/blob_container_client_test.cpp @@ -477,21 +477,21 @@ namespace Azure { namespace Storage { namespace Test { } } - TEST_F(BlobContainerClientTest, DISABLED_EncryptionScope) + TEST_F(BlobContainerClientTest, EncryptionScope) { - auto client = GetBlobContainerTestClient(); - client.Create(); + auto blobContainerClient = GetBlobContainerTestClient(); + blobContainerClient.CreateIfNotExists(); auto const& testEncryptionScope = GetTestEncryptionScope(); { - auto properties = client.GetProperties().Value; + auto properties = blobContainerClient.GetProperties().Value; EXPECT_EQ(properties.DefaultEncryptionScope, AccountEncryptionKey); EXPECT_EQ(properties.PreventEncryptionScopeOverride, false); } { - std::string containerName = LowercaseRandomString(); - std::string blobName = RandomString(); - Blobs::BlobClientOptions options; + std::string containerName = GetContainerValidName() + "1"; + std::string blobName = GetTestName() + "1"; + Blobs::BlobClientOptions options = InitClientOptions(); options.EncryptionScope = testEncryptionScope; auto containerClient = Azure::Storage::Blobs::BlobContainerClient::CreateFromConnectionString( StandardStorageConnectionString(), containerName, options); @@ -526,9 +526,7 @@ namespace Azure { namespace Storage { namespace Test { appendBlobClient.Delete(); EXPECT_TRUE(blobContentInfo.Value.EncryptionScope.HasValue()); EXPECT_EQ(blobContentInfo.Value.EncryptionScope.Value(), testEncryptionScope); - auto appendBlobClientWithoutEncryptionScope - = Azure::Storage::Blobs::AppendBlobClient::CreateFromConnectionString( - StandardStorageConnectionString(), containerName, blobName); + auto appendBlobClientWithoutEncryptionScope = containerClient.GetAppendBlobClient(blobName); blobContentInfo = appendBlobClientWithoutEncryptionScope.Create(); appendBlobClientWithoutEncryptionScope.Delete(); EXPECT_TRUE(blobContentInfo.Value.EncryptionScope.HasValue()); @@ -536,8 +534,8 @@ namespace Azure { namespace Storage { namespace Test { containerClient.Delete(); } { - std::string blobName = RandomString(); - Blobs::BlobClientOptions options; + std::string blobName = GetTestName() + "2"; + Blobs::BlobClientOptions options = InitClientOptions(); options.EncryptionScope = testEncryptionScope; auto appendBlobClient = Azure::Storage::Blobs::AppendBlobClient::CreateFromConnectionString( StandardStorageConnectionString(), m_containerName, blobName, options); @@ -557,8 +555,7 @@ namespace Azure { namespace Storage { namespace Test { bodyStream.Rewind(); auto appendBlobClientWithoutEncryptionScope - = Azure::Storage::Blobs::AppendBlobClient::CreateFromConnectionString( - StandardStorageConnectionString(), m_containerName, blobName); + = blobContainerClient.GetAppendBlobClient(blobName); EXPECT_THROW( appendBlobClientWithoutEncryptionScope.AppendBlock(bodyStream), StorageException); EXPECT_THROW(appendBlobClientWithoutEncryptionScope.CreateSnapshot(), StorageException); @@ -790,15 +787,11 @@ namespace Azure { namespace Storage { namespace Test { TEST_F(BlobContainerClientTest, Tags) { - auto client = GetBlobContainerTestClient(); - client.Create(); + auto containerClient = GetBlobContainerTestClient(); + containerClient.Create(); std::string blobName = "blob" + m_containerName; - auto blobClient = Azure::Storage::Blobs::AppendBlobClient::CreateFromConnectionString( - StandardStorageConnectionString(), - m_containerName, - blobName, - InitClientOptions()); + auto blobClient = containerClient.GetAppendBlobClient(blobName); blobClient.Create(); auto properties = blobClient.GetProperties().Value; @@ -837,14 +830,43 @@ namespace Azure { namespace Storage { namespace Test { auto blobItem = GetBlobItem(blobName, Blobs::Models::ListBlobsIncludeFlags::Tags); EXPECT_EQ(blobItem.Details.Tags, tags); + std::vector blobNames; + blobNames.push_back(blobName); + for (int i = 0; i < 5; ++i) + { + const auto blobName1 = blobName + std::to_string(i); + blobNames.push_back(blobName1); + auto blobClient1 = containerClient.GetAppendBlobClient(blobName1); + blobClient1.Create(); + blobClient1.SetTags(tags); + } + auto blobServiceClient = Azure::Storage::Blobs::BlobServiceClient::CreateFromConnectionString( StandardStorageConnectionString(), InitClientOptions()); std::string whereExpression = c1 + " = '" + v1 + "' AND " + c2 + " >= '" + v2 + "' AND " + c3 + " <= '" + v3 + "'"; - std::vector findResults; + std::vector findResults; + std::vector findResults2; for (int i = 0; i < 30; ++i) { + findResults.clear(); + findResults2.clear(); + Blobs::FindBlobsByTagsOptions findOptions; + findOptions.PageSizeHint = 2; + + for (auto pageResult = containerClient.FindBlobsByTags(whereExpression); pageResult.HasPage(); + pageResult.MoveToNextPage()) + { + EXPECT_FALSE(pageResult.ServiceEndpoint.empty()); + for (auto& item : pageResult.TaggedBlobs) + { + EXPECT_FALSE(item.BlobName.empty()); + EXPECT_EQ(item.BlobContainerName, m_containerName); + EXPECT_FALSE(item.Tags.empty()); + findResults2.emplace_back(item.BlobName); + } + } for (auto pageResult = blobServiceClient.FindBlobsByTags(whereExpression); pageResult.HasPage(); pageResult.MoveToNextPage()) @@ -853,13 +875,13 @@ namespace Azure { namespace Storage { namespace Test { for (auto& item : pageResult.TaggedBlobs) { EXPECT_FALSE(item.BlobName.empty()); - EXPECT_FALSE(item.BlobContainerName.empty()); + EXPECT_EQ(item.BlobContainerName, m_containerName); EXPECT_FALSE(item.Tags.empty()); - findResults.emplace_back(std::move(item)); + findResults.emplace_back(item.BlobName); } } - if (findResults.empty()) + if (findResults.size() != blobNames.size() || findResults2.size() != blobNames.size()) { TestSleep(1s); } @@ -868,9 +890,13 @@ namespace Azure { namespace Storage { namespace Test { break; } } - ASSERT_FALSE(findResults.empty()); - EXPECT_EQ(findResults[0].BlobName, blobName); - EXPECT_EQ(findResults[0].BlobContainerName, m_containerName); + EXPECT_EQ(findResults.size(), blobNames.size()); + EXPECT_EQ(findResults2.size(), blobNames.size()); + std::sort(blobNames.begin(), blobNames.end()); + std::sort(findResults.begin(), findResults.end()); + std::sort(findResults2.begin(), findResults2.end()); + EXPECT_EQ(blobNames, findResults); + EXPECT_EQ(blobNames, findResults2); } TEST_F(BlobContainerClientTest, AccessConditionTags) @@ -1182,7 +1208,7 @@ namespace Azure { namespace Storage { namespace Test { TEST_F(BlobContainerClientTest, SpecialBlobName) { auto client = GetBlobContainerTestClient(); - client.Create(); + client.CreateIfNotExists(); const std::string non_ascii_word = "\xE6\xB5\x8B\xE8\xAF\x95"; const std::string encoded_non_ascii_word = "%E6%B5%8B%E8%AF%95"; @@ -1248,6 +1274,46 @@ namespace Azure { namespace Storage { namespace Test { auto blobItem = GetBlobItem(blobName); EXPECT_EQ(blobItem.Name, blobName); } + { + /* + * UTF-16 0xFFFF and 0xFFFE are not valid in XML, we'll need to encode if blob name contains + * these two characters. + */ + const std::string blobPrefix + = std::string("aaaaa\xEF\xBF\xBF") + "bbb/"; // UTF-8 0xEF, 0xBF, 0xBF is UTF-16 0xFFFF + const std::string blobName = blobPrefix + "ccc"; + auto blobClient = Blobs::BlockBlobClient::CreateFromConnectionString( + StandardStorageConnectionString(), m_containerName, blobName, clientOptions); + EXPECT_NO_THROW(blobClient.UploadFrom(nullptr, 0)); + auto blobUrl = blobClient.GetUrl(); + EXPECT_EQ(blobUrl, client.GetUrl() + "/" + _internal::UrlEncodePath(blobName)); + Blobs::Models::BlobItem blobItem; + Blobs::ListBlobsOptions options; + options.Prefix = "aaaaa"; + for (auto page = client.ListBlobs(options); page.HasPage(); page.MoveToNextPage()) + { + for (auto& blob : page.Blobs) + { + if (blob.Name == blobName) + { + blobItem = std::move(blob); + } + } + } + EXPECT_EQ(blobItem.Name, blobName); + bool found = false; + for (auto page = client.ListBlobsByHierarchy("/"); page.HasPage(); page.MoveToNextPage()) + { + for (auto& p : page.BlobPrefixes) + { + if (p == blobPrefix) + { + found = true; + } + } + } + EXPECT_TRUE(found); + } } TEST_F(BlobContainerClientTest, QuestionMarkBlobName) diff --git a/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp b/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp index 7244866d91..b9f8d3e6f9 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp @@ -584,6 +584,36 @@ namespace Azure { namespace Storage { namespace Test { options.DeleteSnapshots = Blobs::Models::DeleteSnapshotsOption::IncludeSnapshots; blobClient0.Delete(options); } + + // Encryption scope + const auto encryptionScope = GetTestEncryptionScope(); + { + auto sasBuilderWithEncryptionScope = blobSasBuilder; + sasBuilderWithEncryptionScope.EncryptionScope = encryptionScope; + auto blobClientEncryptionScopeSas = Blobs::AppendBlobClient( + blobUrl + sasBuilderWithEncryptionScope.GenerateSasToken(*keyCredential)); + blobClientEncryptionScopeSas.Create(); + auto blobProperties = blobClientEncryptionScopeSas.GetProperties().Value; + ASSERT_TRUE(blobProperties.EncryptionScope.HasValue()); + EXPECT_EQ(blobProperties.EncryptionScope.Value(), encryptionScope); + + blobClientEncryptionScopeSas = Blobs::AppendBlobClient( + blobUrl + sasBuilderWithEncryptionScope.GenerateSasToken(userDelegationKey, accountName)); + blobClientEncryptionScopeSas.Create(); + blobProperties = blobClientEncryptionScopeSas.GetProperties().Value; + ASSERT_TRUE(blobProperties.EncryptionScope.HasValue()); + EXPECT_EQ(blobProperties.EncryptionScope.Value(), encryptionScope); + } + { + auto sasBuilderWithEncryptionScope = accountSasBuilder; + sasBuilderWithEncryptionScope.EncryptionScope = encryptionScope; + auto blobClientEncryptionScopeSas = Blobs::AppendBlobClient( + blobUrl + sasBuilderWithEncryptionScope.GenerateSasToken(*keyCredential)); + blobClientEncryptionScopeSas.Create(); + auto blobProperties = blobClientEncryptionScopeSas.GetProperties().Value; + ASSERT_TRUE(blobProperties.EncryptionScope.HasValue()); + EXPECT_EQ(blobProperties.EncryptionScope.Value(), encryptionScope); + } } }}} // namespace Azure::Storage::Test diff --git a/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp b/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp index 61d24bcde0..5e7b2e28f1 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp @@ -378,6 +378,52 @@ namespace Azure { namespace Storage { namespace Test { EXPECT_FALSE(blobItem.Details.IncrementalCopyDestinationSnapshot.HasValue()); } + TEST_F(BlockBlobClientTest, SyncCopyFromUriEncryptionScope) + { + auto clientOptions = InitClientOptions(); + const auto encryptionScope = GetTestEncryptionScope(); + clientOptions.EncryptionScope = encryptionScope; + const auto containerName = GetContainerValidName(); + const auto blobName = "b"; + auto containerClient = Blobs::BlobContainerClient::CreateFromConnectionString( + StandardStorageConnectionString(), containerName, clientOptions); + containerClient.CreateIfNotExists(); + auto srcBlobClient = containerClient.GetBlockBlobClient(blobName); + uint8_t data; + srcBlobClient.UploadFrom(&data, 1); + + auto properties = srcBlobClient.GetProperties().Value; + ASSERT_TRUE(properties.EncryptionScope.HasValue()); + EXPECT_EQ(properties.EncryptionScope.Value(), encryptionScope); + + { + Sas::BlobSasBuilder builder; + builder.ExpiresOn = std::chrono::system_clock::now() + std::chrono::hours(1); + builder.BlobContainerName = containerName; + builder.BlobName = blobName; + builder.Resource = Sas::BlobSasResource::Blob; + builder.EncryptionScope = encryptionScope; + builder.SetPermissions("r"); + auto keyCredential + = _internal::ParseConnectionString(StandardStorageConnectionString()).KeyCredential; + auto sasToken = builder.GenerateSasToken(*keyCredential); + + auto destBlobClient = GetBlockBlobClient(GetTestName()); + auto response = destBlobClient.CopyFromUri(srcBlobClient.GetUrl() + sasToken); + EXPECT_FALSE(response.Value.EncryptionScope.HasValue()); + properties = destBlobClient.GetProperties().Value; + EXPECT_FALSE(properties.EncryptionScope.HasValue()); + + destBlobClient = containerClient.GetBlockBlobClient(GetTestName()); + response = destBlobClient.CopyFromUri(srcBlobClient.GetUrl() + GetSas()); + ASSERT_TRUE(response.Value.EncryptionScope.HasValue()); + EXPECT_EQ(response.Value.EncryptionScope.Value(), encryptionScope); + properties = destBlobClient.GetProperties().Value; + ASSERT_TRUE(properties.EncryptionScope.HasValue()); + EXPECT_EQ(properties.EncryptionScope.Value(), encryptionScope); + } + } + TEST_F(BlockBlobClientTest, AsyncCopyFromUri) { @@ -455,6 +501,11 @@ namespace Azure { namespace Storage { namespace Test { properties = blobClient->GetProperties().Value; EXPECT_EQ(properties.Metadata, options2.Metadata); EXPECT_EQ(properties.AccessTier.Value(), options2.AccessTier.Value()); + + options2.CopySourceTagsMode = Blobs::Models::BlobCopySourceTagsMode::Copy; + options2.Tags.clear(); + blobClient->CopyFromUri(blockBlobClient.GetUrl() + GetSas(), options2); + EXPECT_TRUE(blobClient->GetTags().Value.empty()); } TEST_F(BlockBlobClientTest, SnapShotVersions) @@ -1856,6 +1907,9 @@ namespace Azure { namespace Storage { namespace Test { auto srcBlobClient = GetBlockBlobClient(testName + "src"); std::vector blobContent(100, 'a'); srcBlobClient.UploadFrom(blobContent.data(), blobContent.size()); + std::map srcTags; + srcTags["srctags"] = "a1212"; + srcBlobClient.SetTags(srcTags); const std::vector blobMd5 = Azure::Core::Cryptography::Md5Hash().Final(blobContent.data(), blobContent.size()); @@ -1894,6 +1948,11 @@ namespace Azure { namespace Storage { namespace Test { EXPECT_EQ(destBlobProperties.Metadata, options.Metadata); EXPECT_EQ(destBlobProperties.AccessTier.Value(), options.AccessTier.Value()); EXPECT_EQ(static_cast(destBlobProperties.TagCount.Value()), options.Tags.size()); + + options.CopySourceTagsMode = Blobs::Models::BlobCopySourceTagsMode::Copy; + options.Tags.clear(); + uploadFromUriResult = destBlobClient.UploadFromUri(srcBlobClient.GetUrl() + GetSas(), options); + EXPECT_EQ(destBlobClient.GetTags().Value, srcTags); } TEST_F(BlockBlobClientTest, SetGetTagsWithLeaseId) diff --git a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobContainerClientTest.EncryptionScope.json b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobContainerClientTest.EncryptionScope.json new file mode 100644 index 0000000000..12998d7a68 --- /dev/null +++ b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobContainerClientTest.EncryptionScope.json @@ -0,0 +1,438 @@ +{ + "networkCallRecords": [ + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "22d4c37d-0ebb-4efb-71a4-886a26c89468", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:20 GMT", + "etag": "\"0x8DA569ABC06F99A\"", + "last-modified": "Sat, 25 Jun 2022 11:06:20 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "22d4c37d-0ebb-4efb-71a4-886a26c89468", + "x-ms-request-id": "ebab5f19-201e-008a-0883-888173000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope?restype=container" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "4335df5c-f537-4a37-47cc-a7138e726cec", + "x-ms-version": "2021-04-10" + }, + "Method": "GET", + "Response": { + "BODY": "", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:20 GMT", + "etag": "\"0x8DA569ABC06F99A\"", + "last-modified": "Sat, 25 Jun 2022 11:06:20 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", + "x-ms-client-request-id": "4335df5c-f537-4a37-47cc-a7138e726cec", + "x-ms-default-encryption-scope": "$account-encryption-key", + "x-ms-deny-encryption-scope-override": "false", + "x-ms-has-immutability-policy": "false", + "x-ms-has-legal-hold": "false", + "x-ms-immutable-storage-with-versioning-enabled": "false", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "ebab5fa6-201e-008a-7f83-888173000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope?restype=container" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "17759e44-94b8-4573-7a47-b1a02f72b540", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:21 GMT", + "etag": "\"0x8DA569ABD0DDEED\"", + "last-modified": "Sat, 25 Jun 2022 11:06:22 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "17759e44-94b8-4573-7a47-b1a02f72b540", + "x-ms-request-id": "6ba8114b-c01e-003b-5a83-889f66000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope1?restype=container" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "2052d85c-bb20-49d4-50f4-2b4066de48e2", + "x-ms-version": "2021-04-10" + }, + "Method": "GET", + "Response": { + "BODY": "", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:21 GMT", + "etag": "\"0x8DA569ABD0DDEED\"", + "last-modified": "Sat, 25 Jun 2022 11:06:22 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", + "x-ms-client-request-id": "2052d85c-bb20-49d4-50f4-2b4066de48e2", + "x-ms-default-encryption-scope": "EncryptionScopeForTest", + "x-ms-deny-encryption-scope-override": "true", + "x-ms-has-immutability-policy": "false", + "x-ms-has-legal-hold": "false", + "x-ms-immutable-storage-with-versioning-enabled": "false", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "6ba8124f-c01e-003b-4b83-889f66000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope1?restype=container" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "902b63b1-4e49-4c49-4a56-337bf646679e", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:22 GMT", + "etag": "\"0x8DA569ABD70E40E\"", + "last-modified": "Sat, 25 Jun 2022 11:06:22 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "902b63b1-4e49-4c49-4a56-337bf646679e", + "x-ms-encryption-scope": "EncryptionScopeForTest", + "x-ms-request-id": "6ba812ea-c01e-003b-5483-889f66000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T11:06:22.9591054Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope1/EncryptionScope1" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "275875fd-2e48-4d94-67cd-5091dc17b4ec", + "x-ms-version": "2021-04-10" + }, + "Method": "GET", + "Response": { + "BODY": "EncryptionScope1EncryptionScope12022-06-25T11:06:22.9591054ZtrueSat, 25 Jun 2022 11:06:22 GMTSat, 25 Jun 2022 11:06:22 GMT0x8DA569ABD70E40E0application/octet-streamAppendBlobunlockedavailabletrueEncryptionScopeForTest", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "content-type": "application/xml", + "date": "Sat, 25 Jun 2022 11:06:22 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "transfer-encoding": "chunked", + "vary": "Origin", + "x-ms-client-request-id": "275875fd-2e48-4d94-67cd-5091dc17b4ec", + "x-ms-request-id": "6ba8139f-c01e-003b-7683-889f66000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope1?comp=list&prefix=EncryptionScope1&restype=container" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "f7f009d3-5966-4d60-440f-d82a47574a0d", + "x-ms-version": "2021-04-10" + }, + "Method": "DELETE", + "Response": { + "BODY": "", + "REASON_PHRASE": "Accepted", + "STATUS_CODE": "202", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:22 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "f7f009d3-5966-4d60-440f-d82a47574a0d", + "x-ms-delete-type-permanent": "false", + "x-ms-request-id": "6ba8145b-c01e-003b-2983-889f66000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope1/EncryptionScope1" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "ccaa96f1-f381-43b6-5325-e5bd7484e6e1", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:23 GMT", + "etag": "\"0x8DA569ABE0D0D12\"", + "last-modified": "Sat, 25 Jun 2022 11:06:23 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "ccaa96f1-f381-43b6-5325-e5bd7484e6e1", + "x-ms-encryption-scope": "EncryptionScopeForTest", + "x-ms-request-id": "6ba8151c-c01e-003b-5a83-889f66000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T11:06:23.9825170Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope1/EncryptionScope1" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "cfc82c9a-1e0e-43d7-7298-e6944de984e9", + "x-ms-version": "2021-04-10" + }, + "Method": "DELETE", + "Response": { + "BODY": "", + "REASON_PHRASE": "Accepted", + "STATUS_CODE": "202", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:23 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "cfc82c9a-1e0e-43d7-7298-e6944de984e9", + "x-ms-delete-type-permanent": "false", + "x-ms-request-id": "6ba815bd-c01e-003b-6e83-889f66000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope1/EncryptionScope1" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "c50e76ee-c87e-4628-6981-5e8fbbbcca78", + "x-ms-version": "2021-04-10" + }, + "Method": "DELETE", + "Response": { + "BODY": "", + "REASON_PHRASE": "Accepted", + "STATUS_CODE": "202", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:23 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "c50e76ee-c87e-4628-6981-5e8fbbbcca78", + "x-ms-request-id": "6ba8165b-c01e-003b-7c83-889f66000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope1?restype=container" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "92aa4595-64a3-44a4-702a-7919621cb2e7", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:25 GMT", + "etag": "\"0x8DA569ABF593256\"", + "last-modified": "Sat, 25 Jun 2022 11:06:26 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "92aa4595-64a3-44a4-702a-7919621cb2e7", + "x-ms-encryption-scope": "EncryptionScopeForTest", + "x-ms-request-id": "6de14a56-d01e-008e-6a83-880c74000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T11:06:26.1592662Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope/EncryptionScope2" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "ed1fdcbf-8c40-4e43-6271-d49280d72107", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:26 GMT", + "etag": "\"0x8DA569ABF8BD3A3\"", + "last-modified": "Sat, 25 Jun 2022 11:06:26 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "ed1fdcbf-8c40-4e43-6271-d49280d72107", + "x-ms-encryption-scope": "EncryptionScopeForTest", + "x-ms-request-id": "6de14b42-d01e-008e-3983-880c74000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T11:06:26.4930752Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope/EncryptionScope2?comp=metadata" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "24857204-e9a7-4eb4-6d56-1287464158d4", + "x-ms-version": "2021-04-10" + }, + "Method": "HEAD", + "Response": { + "BODY": "", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "accept-ranges": "bytes", + "content-length": "0", + "content-type": "application/octet-stream", + "date": "Sat, 25 Jun 2022 11:06:26 GMT", + "etag": "\"0x8DA569ABF8BD3A3\"", + "last-modified": "Sat, 25 Jun 2022 11:06:26 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", + "x-ms-blob-committed-block-count": "0", + "x-ms-blob-type": "AppendBlob", + "x-ms-client-request-id": "24857204-e9a7-4eb4-6d56-1287464158d4", + "x-ms-creation-time": "Sat, 25 Jun 2022 11:06:26 GMT", + "x-ms-encryption-scope": "EncryptionScopeForTest", + "x-ms-is-current-version": "true", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "6de14bee-d01e-008e-4f83-880c74000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T11:06:26.4930752Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope/EncryptionScope2" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "d8463f10-a4aa-4daf-71c3-cc75dcbd31a4", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:26 GMT", + "etag": "\"0x8DA569ABFECAA0E\"", + "last-modified": "Sat, 25 Jun 2022 11:06:27 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-blob-append-offset": "0", + "x-ms-blob-committed-block-count": "1", + "x-ms-client-request-id": "d8463f10-a4aa-4daf-71c3-cc75dcbd31a4", + "x-ms-content-crc64": "KIfs70dQ2tU=", + "x-ms-encryption-scope": "EncryptionScopeForTest", + "x-ms-request-id": "6de14cb2-d01e-008e-0383-880c74000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope/EncryptionScope2?comp=appendblock" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "e941f6fc-c95c-415a-60a0-a02fb7009a1b", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "BlobUsesCustomerSpecifiedEncryptionThe blob is encrypted with customer specified encryption, but it was not provided in the request.\nRequestId:6de14d6d-d01e-008e-2083-880c74000000\nTime:2022-06-25T11:06:27.4443202Z", + "REASON_PHRASE": "The blob is encrypted with customer specified encryption, but it was not provided in the request.", + "STATUS_CODE": "409", + "content-length": "301", + "content-type": "application/xml", + "date": "Sat, 25 Jun 2022 11:06:27 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "e941f6fc-c95c-415a-60a0-a02fb7009a1b", + "x-ms-error-code": "BlobUsesCustomerSpecifiedEncryption", + "x-ms-request-id": "6de14d6d-d01e-008e-2083-880c74000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope/EncryptionScope2?comp=appendblock" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "2c582440-9af5-49d7-402d-3dae79759740", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "BlobUsesCustomerSpecifiedEncryptionThe blob is encrypted with customer specified encryption, but it was not provided in the request.\nRequestId:6de14e3e-d01e-008e-5683-880c74000000\nTime:2022-06-25T11:06:27.7611392Z", + "REASON_PHRASE": "The blob is encrypted with customer specified encryption, but it was not provided in the request.", + "STATUS_CODE": "409", + "content-length": "301", + "content-type": "application/xml", + "date": "Sat, 25 Jun 2022 11:06:27 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "2c582440-9af5-49d7-402d-3dae79759740", + "x-ms-error-code": "BlobUsesCustomerSpecifiedEncryption", + "x-ms-request-id": "6de14e3e-d01e-008e-5683-880c74000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope/EncryptionScope2?comp=snapshot" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "440e942f-fba7-4c84-499d-db434b43d1af", + "x-ms-version": "2021-04-10" + }, + "Method": "DELETE", + "Response": { + "BODY": "", + "REASON_PHRASE": "Accepted", + "STATUS_CODE": "202", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:27 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "440e942f-fba7-4c84-499d-db434b43d1af", + "x-ms-delete-type-permanent": "false", + "x-ms-request-id": "6de14ef7-d01e-008e-7683-880c74000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope/EncryptionScope2" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "25abaec8-8a44-45dc-4839-620961349064", + "x-ms-version": "2021-04-10" + }, + "Method": "DELETE", + "Response": { + "BODY": "", + "REASON_PHRASE": "Accepted", + "STATUS_CODE": "202", + "content-length": "0", + "date": "Sat, 25 Jun 2022 11:06:28 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "25abaec8-8a44-45dc-4839-620961349064", + "x-ms-request-id": "6de14fdd-d01e-008e-3083-880c74000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestencryptionscope?restype=container" + } + ] +} diff --git a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobContainerClientTest.SpecialBlobName.json b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobContainerClientTest.SpecialBlobName.json index c8094abbf3..2dea9f397f 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobContainerClientTest.SpecialBlobName.json +++ b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobContainerClientTest.SpecialBlobName.json @@ -2,31 +2,31 @@ "networkCallRecords": [ { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "caddbf7c-e6b7-46ec-7ac1-39ae992cab98", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "3fc8632c-7297-4a15-5492-7b9317e80e4f", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { - "BODY": "", - "REASON_PHRASE": "Created", - "STATUS_CODE": "201", - "content-length": "0", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", - "etag": "\"0x8D9C0DFE35200EE\"", - "last-modified": "Thu, 16 Dec 2021 22:03:27 GMT", + "BODY": "ContainerAlreadyExistsThe specified container already exists.\nRequestId:622f35fc-801e-0005-3749-880819000000\nTime:2022-06-25T04:08:00.1551929Z", + "REASON_PHRASE": "The specified container already exists.", + "STATUS_CODE": "409", + "content-length": "230", + "content-type": "application/xml", + "date": "Sat, 25 Jun 2022 04:07:59 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "caddbf7c-e6b7-46ec-7ac1-39ae992cab98", - "x-ms-request-id": "618559cc-a01e-0077-5ac8-f2bf6a000000", - "x-ms-version": "2020-02-10" + "x-ms-client-request-id": "3fc8632c-7297-4a15-5492-7b9317e80e4f", + "x-ms-error-code": "ContainerAlreadyExists", + "x-ms-request-id": "622f35fc-801e-0005-3749-880819000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname?restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "82e15a63-aa5e-4715-6bde-77b844a46d09", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "ec9c64ee-f1c3-4300-7172-e3e24d798f28", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -34,44 +34,45 @@ "REASON_PHRASE": "Created", "STATUS_CODE": "201", "content-length": "0", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", - "etag": "\"0x8D9C0DFE354586A\"", - "last-modified": "Thu, 16 Dec 2021 22:03:27 GMT", + "date": "Sat, 25 Jun 2022 04:08:00 GMT", + "etag": "\"0x8DA56604B35A589\"", + "last-modified": "Sat, 25 Jun 2022 04:08:00 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "82e15a63-aa5e-4715-6bde-77b844a46d09", - "x-ms-request-id": "618559e3-a01e-0077-6ec8-f2bf6a000000", + "x-ms-client-request-id": "ec9c64ee-f1c3-4300-7172-e3e24d798f28", + "x-ms-request-id": "622f3652-801e-0005-7d49-880819000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:03:27.3831530Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T04:08:00.5002633Z" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname/a%20b%20c%20/%20!@%23$%25%5E&*(%3F/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "12033ef8-005f-4ad3-6f1a-a439dab4aa71", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "e38f0600-eb9a-448d-6a5e-2191b28ac925", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { - "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobnamea b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname2021-12-16T22:03:27.3831530ZtrueThu, 16 Dec 2021 22:03:27 GMTThu, 16 Dec 2021 22:03:27 GMT0x8D9C0DFE354586A0application/octet-streamAppendBlobunlockedavailabletrue", + "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobnamea b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname2022-06-25T04:08:00.5002633ZtrueSat, 25 Jun 2022 04:08:00 GMTSat, 25 Jun 2022 04:08:00 GMT0x8DA56604B35A5890application/octet-streamAppendBlobunlockedavailabletrue", "REASON_PHRASE": "OK", "STATUS_CODE": "200", "content-type": "application/xml", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", + "date": "Sat, 25 Jun 2022 04:08:00 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "transfer-encoding": "chunked", - "x-ms-client-request-id": "12033ef8-005f-4ad3-6f1a-a439dab4aa71", - "x-ms-request-id": "618559fc-a01e-0077-05c8-f2bf6a000000", - "x-ms-version": "2020-02-10" + "vary": "Origin", + "x-ms-client-request-id": "e38f0600-eb9a-448d-6a5e-2191b28ac925", + "x-ms-request-id": "622f36ae-801e-0005-4b49-880819000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname?comp=list&prefix=a%20b%20c%20/%20!@%23$%25%5E%26*(?/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname&restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "da2b7858-f6f5-4ef5-5a59-f7e20263c86e", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "8e43d1b6-423b-45e6-573b-e5934d128d8e", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -79,44 +80,45 @@ "REASON_PHRASE": "Created", "STATUS_CODE": "201", "content-length": "0", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", - "etag": "\"0x8D9C0DFE3584F7E\"", - "last-modified": "Thu, 16 Dec 2021 22:03:27 GMT", + "date": "Sat, 25 Jun 2022 04:08:00 GMT", + "etag": "\"0x8DA56604B95B8F3\"", + "last-modified": "Sat, 25 Jun 2022 04:08:01 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "da2b7858-f6f5-4ef5-5a59-f7e20263c86e", - "x-ms-request-id": "61855a04-a01e-0077-0dc8-f2bf6a000000", + "x-ms-client-request-id": "8e43d1b6-423b-45e6-573b-e5934d128d8e", + "x-ms-request-id": "622f3721-801e-0005-2a49-880819000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:03:27.4091390Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T04:08:01.1299059Z" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname/a%20b%20c%20/%20!@%23$%25%5E&*(%3F/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname1" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "c3e7786f-0319-4b56-6fae-57b9dec17d2f", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "cb10401c-3444-47cd-4541-353fa51b9262", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { - "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname1a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname12021-12-16T22:03:27.4091390ZtrueThu, 16 Dec 2021 22:03:27 GMTThu, 16 Dec 2021 22:03:27 GMT0x8D9C0DFE3584F7E1024application/octet-stream0PageBlobunlockedavailabletrue", + "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname1a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname12022-06-25T04:08:01.1299059ZtrueSat, 25 Jun 2022 04:08:01 GMTSat, 25 Jun 2022 04:08:01 GMT0x8DA56604B95B8F31024application/octet-stream0PageBlobunlockedavailabletrue", "REASON_PHRASE": "OK", "STATUS_CODE": "200", "content-type": "application/xml", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", + "date": "Sat, 25 Jun 2022 04:08:01 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "transfer-encoding": "chunked", - "x-ms-client-request-id": "c3e7786f-0319-4b56-6fae-57b9dec17d2f", - "x-ms-request-id": "61855a12-a01e-0077-1bc8-f2bf6a000000", - "x-ms-version": "2020-02-10" + "vary": "Origin", + "x-ms-client-request-id": "cb10401c-3444-47cd-4541-353fa51b9262", + "x-ms-request-id": "622f3787-801e-0005-7c49-880819000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname?comp=list&prefix=a%20b%20c%20/%20!@%23$%25%5E%26*(?/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname1&restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "ffab671a-a5f1-4b03-78ce-51a6b00cf42f", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "a432efe8-3979-40fa-68fe-d3b2c72735e5", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -125,45 +127,46 @@ "STATUS_CODE": "201", "content-length": "0", "content-md5": "1B2M2Y8AsgTpgAmY7PhCfg==", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", - "etag": "\"0x8D9C0DFE35BF86A\"", - "last-modified": "Thu, 16 Dec 2021 22:03:27 GMT", + "date": "Sat, 25 Jun 2022 04:08:01 GMT", + "etag": "\"0x8DA56604BF94E4E\"", + "last-modified": "Sat, 25 Jun 2022 04:08:01 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "ffab671a-a5f1-4b03-78ce-51a6b00cf42f", + "x-ms-client-request-id": "a432efe8-3979-40fa-68fe-d3b2c72735e5", "x-ms-content-crc64": "AAAAAAAAAAA=", - "x-ms-request-id": "61855a17-a01e-0077-20c8-f2bf6a000000", + "x-ms-request-id": "622f37fc-801e-0005-5f49-880819000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:03:27.4341237Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T04:08:01.7825358Z" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname/a%20b%20c%20/%20!@%23$%25%5E&*(%3F/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname2" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "ec3e273d-c029-4d6c-5104-4145943eb035", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "a229df2f-a3bb-432a-7152-9955416851ea", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { - "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname2a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname22021-12-16T22:03:27.4341237ZtrueThu, 16 Dec 2021 22:03:27 GMTThu, 16 Dec 2021 22:03:27 GMT0x8D9C0DFE35BF86A0application/octet-stream1B2M2Y8AsgTpgAmY7PhCfg==BlockBlobHottrueunlockedavailabletrue", + "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname2a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname22022-06-25T04:08:01.7825358ZtrueSat, 25 Jun 2022 04:08:01 GMTSat, 25 Jun 2022 04:08:01 GMT0x8DA56604BF94E4E0application/octet-stream1B2M2Y8AsgTpgAmY7PhCfg==Sat, 25 Jun 2022 04:08:01 GMTBlockBlobHottrueunlockedavailabletrue", "REASON_PHRASE": "OK", "STATUS_CODE": "200", "content-type": "application/xml", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", + "date": "Sat, 25 Jun 2022 04:08:01 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "transfer-encoding": "chunked", - "x-ms-client-request-id": "ec3e273d-c029-4d6c-5104-4145943eb035", - "x-ms-request-id": "61855a2b-a01e-0077-32c8-f2bf6a000000", - "x-ms-version": "2020-02-10" + "vary": "Origin", + "x-ms-client-request-id": "a229df2f-a3bb-432a-7152-9955416851ea", + "x-ms-request-id": "622f385c-801e-0005-3349-880819000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname?comp=list&prefix=a%20b%20c%20/%20!@%23$%25%5E%26*(?/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname2&restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "a407d655-98e4-4007-7f20-ee6287439ea6", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "3b355deb-3bc9-4718-427b-8621b7726914", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -171,44 +174,45 @@ "REASON_PHRASE": "Created", "STATUS_CODE": "201", "content-length": "0", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", - "etag": "\"0x8D9C0DFE35F7A58\"", - "last-modified": "Thu, 16 Dec 2021 22:03:27 GMT", + "date": "Sat, 25 Jun 2022 04:08:02 GMT", + "etag": "\"0x8DA56604D1DA6A1\"", + "last-modified": "Sat, 25 Jun 2022 04:08:03 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "a407d655-98e4-4007-7f20-ee6287439ea6", - "x-ms-request-id": "61855a38-a01e-0077-3fc8-f2bf6a000000", + "x-ms-client-request-id": "3b355deb-3bc9-4718-427b-8621b7726914", + "x-ms-request-id": "ffcf3275-601e-006f-2e49-88d031000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:03:27.4571105Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T04:08:03.6984481Z" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname/a%20b%20c%20/%20!@%23$%25%5E&*(%3F/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname3" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "3520d768-cb71-40ca-4717-f54b06b09dd5", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "f26c20bf-9c58-408a-52da-7152f4265756", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { - "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname3a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname32021-12-16T22:03:27.4571105ZtrueThu, 16 Dec 2021 22:03:27 GMTThu, 16 Dec 2021 22:03:27 GMT0x8D9C0DFE35F7A580application/octet-streamAppendBlobunlockedavailabletrue", + "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname3a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname32022-06-25T04:08:03.6984481ZtrueSat, 25 Jun 2022 04:08:03 GMTSat, 25 Jun 2022 04:08:03 GMT0x8DA56604D1DA6A10application/octet-streamAppendBlobunlockedavailabletrue", "REASON_PHRASE": "OK", "STATUS_CODE": "200", "content-type": "application/xml", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", + "date": "Sat, 25 Jun 2022 04:08:03 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "transfer-encoding": "chunked", - "x-ms-client-request-id": "3520d768-cb71-40ca-4717-f54b06b09dd5", - "x-ms-request-id": "61855a86-a01e-0077-06c8-f2bf6a000000", - "x-ms-version": "2020-02-10" + "vary": "Origin", + "x-ms-client-request-id": "f26c20bf-9c58-408a-52da-7152f4265756", + "x-ms-request-id": "ffcf32d9-601e-006f-7d49-88d031000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname?comp=list&prefix=a%20b%20c%20/%20!@%23$%25%5E%26*(?/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname3&restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "7a018901-b9f5-475d-7ad3-528304f5e56a", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "74ff023a-6e85-4df5-60b2-956d91d626ad", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -216,44 +220,45 @@ "REASON_PHRASE": "Created", "STATUS_CODE": "201", "content-length": "0", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", - "etag": "\"0x8D9C0DFE379672B\"", - "last-modified": "Thu, 16 Dec 2021 22:03:27 GMT", + "date": "Sat, 25 Jun 2022 04:08:03 GMT", + "etag": "\"0x8DA56604D7FDCA1\"", + "last-modified": "Sat, 25 Jun 2022 04:08:04 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "7a018901-b9f5-475d-7ad3-528304f5e56a", - "x-ms-request-id": "61855aa8-a01e-0077-22c8-f2bf6a000000", + "x-ms-client-request-id": "74ff023a-6e85-4df5-60b2-956d91d626ad", + "x-ms-request-id": "ffcf3364-601e-006f-7249-88d031000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:03:27.6260139Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T04:08:04.3420833Z" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname/a%20b%20c%20/%20!@%23$%25%5E&*(%3F/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname4" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "cad09f8a-4389-4cac-6f56-5c2da587c46a", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "c42613c6-20bc-4564-4252-95e69547963d", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { - "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname4a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname42021-12-16T22:03:27.6260139ZtrueThu, 16 Dec 2021 22:03:27 GMTThu, 16 Dec 2021 22:03:27 GMT0x8D9C0DFE379672B1024application/octet-stream0PageBlobunlockedavailabletrue", + "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname4a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname42022-06-25T04:08:04.3420833ZtrueSat, 25 Jun 2022 04:08:04 GMTSat, 25 Jun 2022 04:08:04 GMT0x8DA56604D7FDCA11024application/octet-stream0PageBlobunlockedavailabletrue", "REASON_PHRASE": "OK", "STATUS_CODE": "200", "content-type": "application/xml", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", + "date": "Sat, 25 Jun 2022 04:08:03 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "transfer-encoding": "chunked", - "x-ms-client-request-id": "cad09f8a-4389-4cac-6f56-5c2da587c46a", - "x-ms-request-id": "61855acc-a01e-0077-41c8-f2bf6a000000", - "x-ms-version": "2020-02-10" + "vary": "Origin", + "x-ms-client-request-id": "c42613c6-20bc-4564-4252-95e69547963d", + "x-ms-request-id": "ffcf33b9-601e-006f-3a49-88d031000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname?comp=list&prefix=a%20b%20c%20/%20!@%23$%25%5E%26*(?/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname4&restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "2e779d6b-1223-43cf-4261-5d744c50562c", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "7e60c45f-cee6-4342-6aec-024b9c7ab84f", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -262,45 +267,116 @@ "STATUS_CODE": "201", "content-length": "0", "content-md5": "1B2M2Y8AsgTpgAmY7PhCfg==", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", - "etag": "\"0x8D9C0DFE3821876\"", - "last-modified": "Thu, 16 Dec 2021 22:03:27 GMT", + "date": "Sat, 25 Jun 2022 04:08:04 GMT", + "etag": "\"0x8DA56604DE4AA48\"", + "last-modified": "Sat, 25 Jun 2022 04:08:05 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "2e779d6b-1223-43cf-4261-5d744c50562c", + "x-ms-client-request-id": "7e60c45f-cee6-4342-6aec-024b9c7ab84f", "x-ms-content-crc64": "AAAAAAAAAAA=", - "x-ms-request-id": "61855af5-a01e-0077-66c8-f2bf6a000000", + "x-ms-request-id": "ffcf340c-601e-006f-7949-88d031000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:03:27.6829814Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T04:08:05.0027080Z" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname/a%20b%20c%20/%20!@%23$%25%5E&*(%3F/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname5" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "4e17334c-3d24-4fe8-5b5d-9304273ad43b", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "31be965d-048e-4b62-4102-13931bf0b89f", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { - "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname5a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname52021-12-16T22:03:27.6829814ZtrueThu, 16 Dec 2021 22:03:27 GMTThu, 16 Dec 2021 22:03:27 GMT0x8D9C0DFE38218760application/octet-stream1B2M2Y8AsgTpgAmY7PhCfg==BlockBlobHottrueunlockedavailabletrue", + "BODY": "a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname5a b c / !@#$%^&*(?/<>,.;:'\"[]{}|`~) def测试blobcontainerclienttestspecialblobname52022-06-25T04:08:05.0027080ZtrueSat, 25 Jun 2022 04:08:05 GMTSat, 25 Jun 2022 04:08:05 GMT0x8DA56604DE4AA480application/octet-stream1B2M2Y8AsgTpgAmY7PhCfg==Sat, 25 Jun 2022 04:08:05 GMTBlockBlobHottrueunlockedavailabletrue", "REASON_PHRASE": "OK", "STATUS_CODE": "200", "content-type": "application/xml", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", + "date": "Sat, 25 Jun 2022 04:08:04 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "transfer-encoding": "chunked", - "x-ms-client-request-id": "4e17334c-3d24-4fe8-5b5d-9304273ad43b", - "x-ms-request-id": "61855b06-a01e-0077-77c8-f2bf6a000000", - "x-ms-version": "2020-02-10" + "vary": "Origin", + "x-ms-client-request-id": "31be965d-048e-4b62-4102-13931bf0b89f", + "x-ms-request-id": "ffcf34a1-601e-006f-7649-88d031000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname?comp=list&prefix=a%20b%20c%20/%20!@%23$%25%5E%26*(?/%3C%3E,.;:'%22%5B%5D%7B%7D%7C%60~)%20def%E6%B5%8B%E8%AF%95blobcontainerclienttestspecialblobname5&restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "f7c4cd4e-4cce-4b7a-5c9c-942607c5545a", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "a11ef2ee-8ed2-45b7-68ff-8fa78fdbc6ee", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "content-md5": "1B2M2Y8AsgTpgAmY7PhCfg==", + "date": "Sat, 25 Jun 2022 04:08:05 GMT", + "etag": "\"0x8DA56604EA67E90\"", + "last-modified": "Sat, 25 Jun 2022 04:08:06 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "a11ef2ee-8ed2-45b7-68ff-8fa78fdbc6ee", + "x-ms-content-crc64": "AAAAAAAAAAA=", + "x-ms-request-id": "ffcf34eb-601e-006f-3149-88d031000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T04:08:06.2739872Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname/aaaaa%EF%BF%BFbbb/ccc" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "bba38f86-d5be-4443-65ff-cc4f802207ef", + "x-ms-version": "2021-04-10" + }, + "Method": "GET", + "Response": { + "BODY": "aaaaaaaaaabbb/c2022-06-25T04:07:05.9242223ZtrueSat, 25 Jun 2022 04:07:05 GMTSat, 25 Jun 2022 04:07:05 GMT0x8DA56602AAE00EF0application/octet-stream1B2M2Y8AsgTpgAmY7PhCfg==Sat, 25 Jun 2022 04:07:05 GMTBlockBlobHottrueunlockedavailabletrueaaaaa%EF%BF%BFbbb%2Fccc2022-06-25T04:08:06.2739872ZtrueSat, 25 Jun 2022 04:08:06 GMTSat, 25 Jun 2022 04:08:06 GMT0x8DA56604EA67E900application/octet-stream1B2M2Y8AsgTpgAmY7PhCfg==Sat, 25 Jun 2022 04:08:06 GMTBlockBlobHottrueunlockedavailabletrue", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "content-type": "application/xml", + "date": "Sat, 25 Jun 2022 04:08:05 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "transfer-encoding": "chunked", + "vary": "Origin", + "x-ms-client-request-id": "bba38f86-d5be-4443-65ff-cc4f802207ef", + "x-ms-request-id": "ffcf35ef-601e-006f-0349-88d031000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname?comp=list&prefix=aaaaa&restype=container" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "699e782f-6444-40a7-5c64-9f27b2a96d17", + "x-ms-version": "2021-04-10" + }, + "Method": "GET", + "Response": { + "BODY": "/a b c /aaaaabbb/aaaaa%EF%BF%BFbbb%2F", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "content-type": "application/xml", + "date": "Sat, 25 Jun 2022 04:08:06 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "transfer-encoding": "chunked", + "vary": "Origin", + "x-ms-client-request-id": "699e782f-6444-40a7-5c64-9f27b2a96d17", + "x-ms-request-id": "ffcf364d-601e-006f-5349-88d031000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname?comp=list&delimiter=/&restype=container" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "1d2979d4-69cd-4e0f-76ab-5ecdda375617", + "x-ms-version": "2021-04-10" }, "Method": "DELETE", "Response": { @@ -308,11 +384,11 @@ "REASON_PHRASE": "Accepted", "STATUS_CODE": "202", "content-length": "0", - "date": "Thu, 16 Dec 2021 22:03:26 GMT", + "date": "Sat, 25 Jun 2022 04:08:06 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "f7c4cd4e-4cce-4b7a-5c9c-942607c5545a", - "x-ms-request-id": "61855b19-a01e-0077-0ac8-f2bf6a000000", - "x-ms-version": "2020-02-10" + "x-ms-client-request-id": "1d2979d4-69cd-4e0f-76ab-5ecdda375617", + "x-ms-request-id": "ffcf36ba-601e-006f-3249-88d031000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttestspecialblobname?restype=container" } diff --git a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobContainerClientTest.Tags.json b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobContainerClientTest.Tags.json index 61bdf83635..654df9c244 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobContainerClientTest.Tags.json +++ b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobContainerClientTest.Tags.json @@ -2,9 +2,9 @@ "networkCallRecords": [ { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "3bcb2309-aaf3-4d0b-6f9a-440a118f1b6b", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "64a2b3a3-6966-4163-51ea-fb2a95fa1331", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -12,21 +12,21 @@ "REASON_PHRASE": "Created", "STATUS_CODE": "201", "content-length": "0", - "date": "Sun, 20 Feb 2022 05:27:30 GMT", - "etag": "\"0x8D9F431B080C267\"", - "last-modified": "Sun, 20 Feb 2022 05:27:30 GMT", + "date": "Sat, 25 Jun 2022 05:24:11 GMT", + "etag": "\"0x8DA566AEFDBD255\"", + "last-modified": "Sat, 25 Jun 2022 05:24:11 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "3bcb2309-aaf3-4d0b-6f9a-440a118f1b6b", - "x-ms-request-id": "de3aee85-001e-0039-7a1a-263749000000", - "x-ms-version": "2020-08-04" + "x-ms-client-request-id": "64a2b3a3-6966-4163-51ea-fb2a95fa1331", + "x-ms-request-id": "824ed3d1-f01e-0052-1553-88a62a000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags?restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "d27606df-4899-49bc-58ea-faea349cceb6", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "4beb1b5d-fb88-43be-779f-f761380d4e99", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -34,23 +34,23 @@ "REASON_PHRASE": "Created", "STATUS_CODE": "201", "content-length": "0", - "date": "Sun, 20 Feb 2022 05:27:30 GMT", - "etag": "\"0x8D9F431B0A856C4\"", - "last-modified": "Sun, 20 Feb 2022 05:27:30 GMT", + "date": "Sat, 25 Jun 2022 05:24:11 GMT", + "etag": "\"0x8DA566AF0179384\"", + "last-modified": "Sat, 25 Jun 2022 05:24:12 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "d27606df-4899-49bc-58ea-faea349cceb6", - "x-ms-request-id": "de3aef0c-001e-0039-741a-263749000000", + "x-ms-client-request-id": "4beb1b5d-fb88-43be-779f-f761380d4e99", + "x-ms-request-id": "824ed4a2-f01e-0052-5a53-88a62a000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2022-02-20T05:27:30.4032964Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T05:24:12.0955540Z" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "c972d5e7-b0a8-4826-6ffd-525ea77f984b", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "f70ef028-b83b-4553-7fd0-3368ca80f058", + "x-ms-version": "2021-04-10" }, "Method": "HEAD", "Response": { @@ -60,30 +60,30 @@ "accept-ranges": "bytes", "content-length": "0", "content-type": "application/octet-stream", - "date": "Sun, 20 Feb 2022 05:27:30 GMT", - "etag": "\"0x8D9F431B0A856C4\"", - "last-modified": "Sun, 20 Feb 2022 05:27:30 GMT", + "date": "Sat, 25 Jun 2022 05:24:12 GMT", + "etag": "\"0x8DA566AF0179384\"", + "last-modified": "Sat, 25 Jun 2022 05:24:12 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "vary": "Origin", "x-ms-blob-committed-block-count": "0", "x-ms-blob-type": "AppendBlob", - "x-ms-client-request-id": "c972d5e7-b0a8-4826-6ffd-525ea77f984b", - "x-ms-creation-time": "Sun, 20 Feb 2022 05:27:30 GMT", + "x-ms-client-request-id": "f70ef028-b83b-4553-7fd0-3368ca80f058", + "x-ms-creation-time": "Sat, 25 Jun 2022 05:24:12 GMT", "x-ms-is-current-version": "true", "x-ms-lease-state": "available", "x-ms-lease-status": "unlocked", - "x-ms-request-id": "de3aef4e-001e-0039-321a-263749000000", + "x-ms-request-id": "824ed58d-f01e-0052-2453-88a62a000000", "x-ms-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2022-02-20T05:27:30.4032964Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T05:24:12.0955540Z" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "aacd61c4-2e05-42ca-5c7a-0707670bf89d", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "3333e184-195e-405b-4fb6-3bed6bb32dcd", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { @@ -93,30 +93,30 @@ "accept-ranges": "bytes", "content-length": "0", "content-type": "application/octet-stream", - "date": "Sun, 20 Feb 2022 05:27:30 GMT", - "etag": "\"0x8D9F431B0A856C4\"", - "last-modified": "Sun, 20 Feb 2022 05:27:30 GMT", + "date": "Sat, 25 Jun 2022 05:24:12 GMT", + "etag": "\"0x8DA566AF0179384\"", + "last-modified": "Sat, 25 Jun 2022 05:24:12 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "vary": "Origin", "x-ms-blob-committed-block-count": "0", "x-ms-blob-type": "AppendBlob", - "x-ms-client-request-id": "aacd61c4-2e05-42ca-5c7a-0707670bf89d", - "x-ms-creation-time": "Sun, 20 Feb 2022 05:27:30 GMT", + "x-ms-client-request-id": "3333e184-195e-405b-4fb6-3bed6bb32dcd", + "x-ms-creation-time": "Sat, 25 Jun 2022 05:24:12 GMT", "x-ms-is-current-version": "true", "x-ms-lease-state": "available", "x-ms-lease-status": "unlocked", - "x-ms-request-id": "de3aef96-001e-0039-731a-263749000000", + "x-ms-request-id": "824ed640-f01e-0052-4753-88a62a000000", "x-ms-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2022-02-20T05:27:30.4032964Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T05:24:12.0955540Z" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "73557ccc-c7ff-4c06-729f-d89428b60337", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "1d2bf0a4-3508-4f20-78fe-8e728e082112", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { @@ -125,40 +125,40 @@ "STATUS_CODE": "200", "content-length": "64", "content-type": "application/xml", - "date": "Sun, 20 Feb 2022 05:27:31 GMT", + "date": "Sat, 25 Jun 2022 05:24:12 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "vary": "Origin", - "x-ms-client-request-id": "73557ccc-c7ff-4c06-729f-d89428b60337", - "x-ms-request-id": "de3af016-001e-0039-6d1a-263749000000", - "x-ms-version": "2020-08-04" + "x-ms-client-request-id": "1d2bf0a4-3508-4f20-78fe-8e728e082112", + "x-ms-request-id": "824ed735-f01e-0052-2a53-88a62a000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags?comp=tags" }, { "Headers": { "content-type": "application/xml; charset=UTF-8", - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "26b3ed0e-789a-4191-6ea2-c15a517a97dc", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "1c6da193-c721-4cf3-5583-c6e0ecf794a9", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { "BODY": "", "REASON_PHRASE": "No Content", "STATUS_CODE": "204", - "date": "Sun, 20 Feb 2022 05:27:31 GMT", + "date": "Sat, 25 Jun 2022 05:24:13 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "26b3ed0e-789a-4191-6ea2-c15a517a97dc", - "x-ms-request-id": "de3af091-001e-0039-621a-263749000000", - "x-ms-version": "2020-08-04" + "x-ms-client-request-id": "1c6da193-c721-4cf3-5583-c6e0ecf794a9", + "x-ms-request-id": "824ed839-f01e-0052-1653-88a62a000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags?comp=tags" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "43cdb534-1edc-42c0-6e8f-b7eec3d97864", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "14274b63-a0c3-426b-6247-29412e2ed9b4", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { @@ -167,20 +167,20 @@ "STATUS_CODE": "200", "content-length": "354", "content-type": "application/xml", - "date": "Sun, 20 Feb 2022 05:27:31 GMT", + "date": "Sat, 25 Jun 2022 05:24:13 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "vary": "Origin", - "x-ms-client-request-id": "43cdb534-1edc-42c0-6e8f-b7eec3d97864", - "x-ms-request-id": "de3af0fc-001e-0039-3d1a-263749000000", - "x-ms-version": "2020-08-04" + "x-ms-client-request-id": "14274b63-a0c3-426b-6247-29412e2ed9b4", + "x-ms-request-id": "824ed93a-f01e-0052-0653-88a62a000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags?comp=tags" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "eb6e23cb-20ef-4a95-63a5-04f64d421ff6", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "3ed2f563-3f19-47b2-70bd-f363a025268f", + "x-ms-version": "2021-04-10" }, "Method": "HEAD", "Response": { @@ -190,31 +190,31 @@ "accept-ranges": "bytes", "content-length": "0", "content-type": "application/octet-stream", - "date": "Sun, 20 Feb 2022 05:27:31 GMT", - "etag": "\"0x8D9F431B0A856C4\"", - "last-modified": "Sun, 20 Feb 2022 05:27:30 GMT", + "date": "Sat, 25 Jun 2022 05:24:13 GMT", + "etag": "\"0x8DA566AF0179384\"", + "last-modified": "Sat, 25 Jun 2022 05:24:12 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "vary": "Origin", "x-ms-blob-committed-block-count": "0", "x-ms-blob-type": "AppendBlob", - "x-ms-client-request-id": "eb6e23cb-20ef-4a95-63a5-04f64d421ff6", - "x-ms-creation-time": "Sun, 20 Feb 2022 05:27:30 GMT", + "x-ms-client-request-id": "3ed2f563-3f19-47b2-70bd-f363a025268f", + "x-ms-creation-time": "Sat, 25 Jun 2022 05:24:12 GMT", "x-ms-is-current-version": "true", "x-ms-lease-state": "available", "x-ms-lease-status": "unlocked", - "x-ms-request-id": "de3af146-001e-0039-7e1a-263749000000", + "x-ms-request-id": "824ed9ca-f01e-0052-0253-88a62a000000", "x-ms-server-encrypted": "true", "x-ms-tag-count": "3", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2022-02-20T05:27:30.4032964Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T05:24:12.0955540Z" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "375d08ae-5e8d-4157-586f-6d5001d6bc49", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "92cda55d-c210-4833-685f-653d1636efe9", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { @@ -224,75 +224,317 @@ "accept-ranges": "bytes", "content-length": "0", "content-type": "application/octet-stream", - "date": "Sun, 20 Feb 2022 05:27:32 GMT", - "etag": "\"0x8D9F431B0A856C4\"", - "last-modified": "Sun, 20 Feb 2022 05:27:30 GMT", + "date": "Sat, 25 Jun 2022 05:24:14 GMT", + "etag": "\"0x8DA566AF0179384\"", + "last-modified": "Sat, 25 Jun 2022 05:24:12 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "vary": "Origin", "x-ms-blob-committed-block-count": "0", "x-ms-blob-type": "AppendBlob", - "x-ms-client-request-id": "375d08ae-5e8d-4157-586f-6d5001d6bc49", - "x-ms-creation-time": "Sun, 20 Feb 2022 05:27:30 GMT", + "x-ms-client-request-id": "92cda55d-c210-4833-685f-653d1636efe9", + "x-ms-creation-time": "Sat, 25 Jun 2022 05:24:12 GMT", "x-ms-is-current-version": "true", "x-ms-lease-state": "available", "x-ms-lease-status": "unlocked", - "x-ms-request-id": "de3af1bd-001e-0039-611a-263749000000", + "x-ms-request-id": "824eda61-f01e-0052-0353-88a62a000000", "x-ms-server-encrypted": "true", "x-ms-tag-count": "3", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2022-02-20T05:27:30.4032964Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T05:24:12.0955540Z" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "ba59ce19-b611-4474-524f-5234298a790c", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "6b2698d9-5396-461c-5cc8-ec12ad08c24d", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { - "BODY": "blobblobcontainerclienttesttagsblobblobcontainerclienttesttags2022-02-20T05:27:30.4032964ZtrueSun, 20 Feb 2022 05:27:30 GMTSun, 20 Feb 2022 05:27:30 GMT0x8D9F431B0A856C40application/octet-streamAppendBlobunlockedavailabletrue3kblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6", + "BODY": "blobblobcontainerclienttesttagsblobblobcontainerclienttesttags2022-06-25T05:24:12.0955540ZtrueSat, 25 Jun 2022 05:24:12 GMTSat, 25 Jun 2022 05:24:12 GMT0x8DA566AF01793840application/octet-streamAppendBlobunlockedavailabletrue3kblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6", "REASON_PHRASE": "OK", "STATUS_CODE": "200", "content-type": "application/xml", - "date": "Sun, 20 Feb 2022 05:27:32 GMT", + "date": "Sat, 25 Jun 2022 05:24:14 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "transfer-encoding": "chunked", "vary": "Origin", - "x-ms-client-request-id": "ba59ce19-b611-4474-524f-5234298a790c", - "x-ms-request-id": "de3af230-001e-0039-4a1a-263749000000", - "x-ms-version": "2020-08-04" + "x-ms-client-request-id": "6b2698d9-5396-461c-5cc8-ec12ad08c24d", + "x-ms-request-id": "824edb38-f01e-0052-4953-88a62a000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags?comp=list&include=tags&prefix=blobblobcontainerclienttesttags&restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "92b49baf-2160-4324-41f0-389224fe6732", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "138b2a47-0144-4779-7fdd-72c2b9a12578", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 05:24:14 GMT", + "etag": "\"0x8DA566AF1EC3597\"", + "last-modified": "Sat, 25 Jun 2022 05:24:15 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "138b2a47-0144-4779-7fdd-72c2b9a12578", + "x-ms-request-id": "824edbf3-f01e-0052-7b53-88a62a000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T05:24:15.1657879Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags0" + }, + { + "Headers": { + "content-type": "application/xml; charset=UTF-8", + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "141c5f97-9d6c-4908-6ab4-f41a61764095", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "No Content", + "STATUS_CODE": "204", + "date": "Sat, 25 Jun 2022 05:24:15 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "141c5f97-9d6c-4908-6ab4-f41a61764095", + "x-ms-request-id": "824edc5c-f01e-0052-5253-88a62a000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags0?comp=tags" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "6d425483-862e-43d2-736a-401341706ffe", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 05:24:15 GMT", + "etag": "\"0x8DA566AF268582F\"", + "last-modified": "Sat, 25 Jun 2022 05:24:15 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "6d425483-862e-43d2-736a-401341706ffe", + "x-ms-request-id": "824edd36-f01e-0052-1153-88a62a000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T05:24:15.9793199Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags1" + }, + { + "Headers": { + "content-type": "application/xml; charset=UTF-8", + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "d6f7fde7-ac2c-4739-5b27-42c74263f998", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "No Content", + "STATUS_CODE": "204", + "date": "Sat, 25 Jun 2022 05:24:16 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "d6f7fde7-ac2c-4739-5b27-42c74263f998", + "x-ms-request-id": "824ede3e-f01e-0052-0653-88a62a000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags1?comp=tags" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "795dd0c1-f698-4d35-53de-f8f28ca29e01", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 05:24:16 GMT", + "etag": "\"0x8DA566AF2E1BC18\"", + "last-modified": "Sat, 25 Jun 2022 05:24:16 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "795dd0c1-f698-4d35-53de-f8f28ca29e01", + "x-ms-request-id": "824edf4e-f01e-0052-7f53-88a62a000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T05:24:16.7748632Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags2" + }, + { + "Headers": { + "content-type": "application/xml; charset=UTF-8", + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "3a022011-3dbd-4491-6454-3825821c6a7c", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "No Content", + "STATUS_CODE": "204", + "date": "Sat, 25 Jun 2022 05:24:16 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "3a022011-3dbd-4491-6454-3825821c6a7c", + "x-ms-request-id": "824ee006-f01e-0052-2553-88a62a000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags2?comp=tags" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "c2e65d82-e361-4e97-45a8-a58fa2ea3643", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 05:24:17 GMT", + "etag": "\"0x8DA566AF35DB7A4\"", + "last-modified": "Sat, 25 Jun 2022 05:24:17 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "c2e65d82-e361-4e97-45a8-a58fa2ea3643", + "x-ms-request-id": "824ee123-f01e-0052-2c53-88a62a000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T05:24:17.5873956Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags3" + }, + { + "Headers": { + "content-type": "application/xml; charset=UTF-8", + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "ed175c6a-37ec-4150-588e-c997d7fd911f", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "No Content", + "STATUS_CODE": "204", + "date": "Sat, 25 Jun 2022 05:24:17 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "ed175c6a-37ec-4150-588e-c997d7fd911f", + "x-ms-request-id": "824ee21c-f01e-0052-1053-88a62a000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags3?comp=tags" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "36980153-45ba-499d-73e5-fd73fe308659", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 05:24:18 GMT", + "etag": "\"0x8DA566AF3D87AE1\"", + "last-modified": "Sat, 25 Jun 2022 05:24:18 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "36980153-45ba-499d-73e5-fd73fe308659", + "x-ms-request-id": "824ee355-f01e-0052-3a53-88a62a000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T05:24:18.3919329Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags4" + }, + { + "Headers": { + "content-type": "application/xml; charset=UTF-8", + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "5ae1f731-ac3b-4c55-46fa-9ee7460ae898", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "No Content", + "STATUS_CODE": "204", + "date": "Sat, 25 Jun 2022 05:24:18 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "5ae1f731-ac3b-4c55-46fa-9ee7460ae898", + "x-ms-request-id": "824ee41d-f01e-0052-7053-88a62a000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags/blobblobcontainerclienttesttags4?comp=tags" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "11c82f51-62cd-4fb0-57f3-2a333378b8fb", + "x-ms-version": "2021-04-10" + }, + "Method": "GET", + "Response": { + "BODY": "\nkblobcontainerclienttesttags1 = 'blobcontainerclienttesttags2' AND kblobcontainerclienttesttags3 >= 'blobcontainerclienttesttags4' AND kblobcontainerclienttesttags5 <= 'blobcontainerclienttesttags6'blobblobcontainerclienttesttagsblobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6blobblobcontainerclienttesttags0blobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6blobblobcontainerclienttesttags1blobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6blobblobcontainerclienttesttags2blobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6blobblobcontainerclienttesttags3blobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6blobblobcontainerclienttesttags4blobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "content-type": "application/xml", + "date": "Sat, 25 Jun 2022 05:24:55 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "transfer-encoding": "chunked", + "vary": "Origin", + "x-ms-client-request-id": "11c82f51-62cd-4fb0-57f3-2a333378b8fb", + "x-ms-request-id": "f40e10ad-501e-0029-0b53-88e4b6000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags?comp=blobs&restype=container&where=kblobcontainerclienttesttags1%20%3D%20'blobcontainerclienttesttags2'%20AND%20kblobcontainerclienttesttags3%20%3E%3D%20'blobcontainerclienttesttags4'%20AND%20kblobcontainerclienttesttags5%20%3C%3D%20'blobcontainerclienttesttags6'" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "0c45311a-bcfc-4c43-4c1b-2a034c197115", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { - "BODY": "\nkblobcontainerclienttesttags1 = 'blobcontainerclienttesttags2' AND kblobcontainerclienttesttags3 >= 'blobcontainerclienttesttags4' AND kblobcontainerclienttesttags5 <= 'blobcontainerclienttesttags6'blobblobcontainerclienttesttagsblobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6", + "BODY": "\nkblobcontainerclienttesttags1 = 'blobcontainerclienttesttags2' AND kblobcontainerclienttesttags3 >= 'blobcontainerclienttesttags4' AND kblobcontainerclienttesttags5 <= 'blobcontainerclienttesttags6'blobblobcontainerclienttesttagsblobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6blobblobcontainerclienttesttags0blobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6blobblobcontainerclienttesttags1blobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6blobblobcontainerclienttesttags2blobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6blobblobcontainerclienttesttags3blobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6blobblobcontainerclienttesttags4blobcontainerclienttesttagskblobcontainerclienttesttags1blobcontainerclienttesttags2kblobcontainerclienttesttags3blobcontainerclienttesttags4kblobcontainerclienttesttags5blobcontainerclienttesttags6", "REASON_PHRASE": "OK", "STATUS_CODE": "200", "content-type": "application/xml", - "date": "Sun, 20 Feb 2022 05:27:33 GMT", + "date": "Sat, 25 Jun 2022 05:25:04 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "transfer-encoding": "chunked", "vary": "Origin", - "x-ms-client-request-id": "92b49baf-2160-4324-41f0-389224fe6732", - "x-ms-request-id": "de3af2ac-001e-0039-3a1a-263749000000", - "x-ms-version": "2020-08-04" + "x-ms-client-request-id": "0c45311a-bcfc-4c43-4c1b-2a034c197115", + "x-ms-request-id": "8c4ecb35-801e-0077-4353-880f56000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net?comp=blobs&where=kblobcontainerclienttesttags1%20%3D%20'blobcontainerclienttesttags2'%20AND%20kblobcontainerclienttesttags3%20%3E%3D%20'blobcontainerclienttesttags4'%20AND%20kblobcontainerclienttesttags5%20%3C%3D%20'blobcontainerclienttesttags6'" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "8c2ebbaa-5369-47c2-4c87-ed254b8b3e93", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "afc5609e-ea85-4d73-7447-52519486a810", + "x-ms-version": "2021-04-10" }, "Method": "DELETE", "Response": { @@ -300,11 +542,11 @@ "REASON_PHRASE": "Accepted", "STATUS_CODE": "202", "content-length": "0", - "date": "Sun, 20 Feb 2022 05:27:33 GMT", + "date": "Sat, 25 Jun 2022 05:25:04 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "8c2ebbaa-5369-47c2-4c87-ed254b8b3e93", - "x-ms-request-id": "de3af3a9-001e-0039-211a-263749000000", - "x-ms-version": "2020-08-04" + "x-ms-client-request-id": "afc5609e-ea85-4d73-7447-52519486a810", + "x-ms-request-id": "8c4ed7b9-801e-0077-5d53-880f56000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blobcontainerclienttesttags?restype=container" } diff --git a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobServiceClientTest.SetProperties.json b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobServiceClientTest.SetProperties.json index 429767bcfd..2c1d7291ae 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobServiceClientTest.SetProperties.json +++ b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlobServiceClientTest.SetProperties.json @@ -2,32 +2,32 @@ "networkCallRecords": [ { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.1 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "35419e25-3165-4f93-51f9-5bab0eaec1ae", - "x-ms-version": "2020-10-02" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "2a77ceea-064a-429a-6021-4ca52875ace4", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { - "BODY": "1.0truetruetruetrue31.0truetruetrue41.0truetruetrue4GET,PUThttp://www.example1.comx-ms-header1,x-ms-header2x-ms-header310DELETEhttp://www.example2.comx-ms-header1x-ms-header2,x-ms-header320true7falsetrueindex.html404.html2020-02-10", + "BODY": "1.0truetruetruetrue31.0truetruetrue41.0truetruetrue4GET,PUThttp://www.example1.comx-ms-header1,x-ms-header2x-ms-header310DELETEhttp://www.example2.comx-ms-header1x-ms-header2,x-ms-header320falsefalsetrueindex.html404.html2020-02-10", "REASON_PHRASE": "OK", "STATUS_CODE": "200", "content-type": "application/xml", - "date": "Mon, 16 May 2022 12:49:31 GMT", + "date": "Sat, 25 Jun 2022 09:01:41 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "transfer-encoding": "chunked", "vary": "Origin", - "x-ms-client-request-id": "35419e25-3165-4f93-51f9-5bab0eaec1ae", - "x-ms-request-id": "da10e09f-c01e-0082-5723-699b7c000000", - "x-ms-version": "2020-10-02" + "x-ms-client-request-id": "2a77ceea-064a-429a-6021-4ca52875ace4", + "x-ms-request-id": "62a44147-801e-0005-4972-880819000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net?comp=properties&restype=service" }, { "Headers": { "content-type": "application/xml; charset=UTF-8", - "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.1 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "6944decb-5ada-41b4-6365-2f9b90220ebe", - "x-ms-version": "2020-10-02" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "6a95c651-9aa3-492b-5972-8cbb59324f71", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -35,42 +35,42 @@ "REASON_PHRASE": "Accepted", "STATUS_CODE": "202", "content-length": "0", - "date": "Mon, 16 May 2022 12:49:33 GMT", + "date": "Sat, 25 Jun 2022 09:01:42 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "6944decb-5ada-41b4-6365-2f9b90220ebe", - "x-ms-request-id": "da10e162-c01e-0082-1423-699b7c000000", - "x-ms-version": "2020-10-02" + "x-ms-client-request-id": "6a95c651-9aa3-492b-5972-8cbb59324f71", + "x-ms-request-id": "62a442ae-801e-0005-0a72-880819000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net?comp=properties&restype=service" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.1 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "a72f237f-cb76-4e90-52a6-eea437169f93", - "x-ms-version": "2020-10-02" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "d278e4e0-815c-49df-67ab-a8de0f97ef49", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { - "BODY": "1.0falsefalsefalsetrue31.0truetruetrue41.0truetruetrue4GET,PUThttp://www.example1.comx-ms-header1,x-ms-header2x-ms-header310DELETEhttp://www.example2.comx-ms-header1x-ms-header2,x-ms-header320GET,PUThttp://www.example1.comx-ms-header1,x-ms-header2x-ms-header310DELETEhttp://www.example2.comx-ms-header1x-ms-header2,x-ms-header320true7falsetrueindex.html404.html2020-10-02", + "BODY": "1.0falsefalsefalsetrue31.0truetruetrue41.0truetruetrue4GET,PUThttp://www.example1.comx-ms-header1,x-ms-header2x-ms-header310DELETEhttp://www.example2.comx-ms-header1x-ms-header2,x-ms-header320GET,PUThttp://www.example1.comx-ms-header1,x-ms-header2x-ms-header310DELETEhttp://www.example2.comx-ms-header1x-ms-header2,x-ms-header320true7falsetrueindex.html404.html2021-04-10", "REASON_PHRASE": "OK", "STATUS_CODE": "200", "content-type": "application/xml", - "date": "Mon, 16 May 2022 12:49:43 GMT", + "date": "Sat, 25 Jun 2022 09:01:52 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "transfer-encoding": "chunked", "vary": "Origin", - "x-ms-client-request-id": "a72f237f-cb76-4e90-52a6-eea437169f93", - "x-ms-request-id": "da10fdaf-c01e-0082-1623-699b7c000000", - "x-ms-version": "2020-10-02" + "x-ms-client-request-id": "d278e4e0-815c-49df-67ab-a8de0f97ef49", + "x-ms-request-id": "62a46672-801e-0005-3372-880819000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net?comp=properties&restype=service" }, { "Headers": { "content-type": "application/xml; charset=UTF-8", - "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.1 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "ff874718-2fc2-479f-6308-fe94f0c824c9", - "x-ms-version": "2020-10-02" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "b4b5d9aa-af34-4034-50e3-7188883a0fd8", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -78,11 +78,11 @@ "REASON_PHRASE": "Accepted", "STATUS_CODE": "202", "content-length": "0", - "date": "Mon, 16 May 2022 12:49:43 GMT", + "date": "Sat, 25 Jun 2022 09:01:52 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "ff874718-2fc2-479f-6308-fe94f0c824c9", - "x-ms-request-id": "da10fe3e-c01e-0082-1b23-699b7c000000", - "x-ms-version": "2020-10-02" + "x-ms-client-request-id": "b4b5d9aa-af34-4034-50e3-7188883a0fd8", + "x-ms-request-id": "62a46785-801e-0005-3272-880819000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net?comp=properties&restype=service" } diff --git a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlockBlobClientTest.CopyWithTagsMetadataTier.json b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlockBlobClientTest.CopyWithTagsMetadataTier.json index d691278c7b..8370fc74a4 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlockBlobClientTest.CopyWithTagsMetadataTier.json +++ b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlockBlobClientTest.CopyWithTagsMetadataTier.json @@ -2,9 +2,9 @@ "networkCallRecords": [ { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "7d24cc71-aa97-4c63-4969-f47fa74c2dec", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "136c790c-0de5-4777-7b0a-c54ea67fb8f4", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -12,21 +12,21 @@ "REASON_PHRASE": "Created", "STATUS_CODE": "201", "content-length": "0", - "date": "Thu, 16 Dec 2021 22:04:17 GMT", - "etag": "\"0x8D9C0E001DE1B9E\"", - "last-modified": "Thu, 16 Dec 2021 22:04:18 GMT", + "date": "Sat, 25 Jun 2022 08:32:57 GMT", + "etag": "\"0x8DA56854EE03EE9\"", + "last-modified": "Sat, 25 Jun 2022 08:32:58 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "7d24cc71-aa97-4c63-4969-f47fa74c2dec", - "x-ms-request-id": "9097b259-401e-0032-29c8-f26a89000000", - "x-ms-version": "2020-02-10" + "x-ms-client-request-id": "136c790c-0de5-4777-7b0a-c54ea67fb8f4", + "x-ms-request-id": "01b563eb-101e-0091-0c6e-88bf70000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier?restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "df627bad-9f58-4892-6a70-ab7cff370d68", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "1b091b27-82b3-4b5f-5c06-73a542126d17", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -35,24 +35,24 @@ "STATUS_CODE": "201", "content-length": "0", "content-md5": "IFj7U/ZD/NWKjYOgVUI5Kw==", - "date": "Thu, 16 Dec 2021 22:04:18 GMT", - "etag": "\"0x8D9C0E0020A0D10\"", - "last-modified": "Thu, 16 Dec 2021 22:04:18 GMT", + "date": "Sat, 25 Jun 2022 08:33:02 GMT", + "etag": "\"0x8DA5685518CC746\"", + "last-modified": "Sat, 25 Jun 2022 08:33:02 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "df627bad-9f58-4892-6a70-ab7cff370d68", + "x-ms-client-request-id": "1b091b27-82b3-4b5f-5c06-73a542126d17", "x-ms-content-crc64": "DU01Kv81ewI=", - "x-ms-request-id": "9097b27e-401e-0032-4ac8-f26a89000000", + "x-ms-request-id": "01b5649f-101e-0091-176e-88bf70000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:04:18.9056272Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:33:02.5166150Z" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTier" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "ff1b397b-31c5-4ebd-531f-b4a52c16acca", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "7e32eb34-f071-43c5-420f-fd410e21c2f6", + "x-ms-version": "2021-04-10" }, "Method": "HEAD", "Response": { @@ -67,54 +67,56 @@ "content-length": "8388608", "content-md5": "IFj7U/ZD/NWKjYOgVUI5Kw==", "content-type": "application/x-binary", - "date": "Thu, 16 Dec 2021 22:04:18 GMT", - "etag": "\"0x8D9C0E0020A0D10\"", - "last-modified": "Thu, 16 Dec 2021 22:04:18 GMT", + "date": "Sat, 25 Jun 2022 08:33:02 GMT", + "etag": "\"0x8DA5685518CC746\"", + "last-modified": "Sat, 25 Jun 2022 08:33:02 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", "x-ms-access-tier": "Hot", - "x-ms-access-tier-change-time": "Thu, 16 Dec 2021 22:04:18 GMT", + "x-ms-access-tier-change-time": "Sat, 25 Jun 2022 08:33:02 GMT", "x-ms-blob-type": "BlockBlob", - "x-ms-client-request-id": "ff1b397b-31c5-4ebd-531f-b4a52c16acca", - "x-ms-creation-time": "Thu, 16 Dec 2021 22:04:18 GMT", + "x-ms-client-request-id": "7e32eb34-f071-43c5-420f-fd410e21c2f6", + "x-ms-creation-time": "Sat, 25 Jun 2022 08:33:02 GMT", "x-ms-is-current-version": "true", + "x-ms-last-access-time": "Sat, 25 Jun 2022 08:33:02 GMT", "x-ms-lease-state": "available", "x-ms-lease-status": "unlocked", "x-ms-meta-key1": "V1", "x-ms-meta-key2": "Value2", - "x-ms-request-id": "9097b3ff-401e-0032-37c8-f26a89000000", + "x-ms-request-id": "01b56cdb-101e-0091-556e-88bf70000000", "x-ms-server-encrypted": "true", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:04:18.9056272Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:33:02.5166150Z" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTier" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "100ee672-a8fc-4840-6e02-67c02bf2766b", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "4192a549-8f08-4fd4-6e7e-85efbaa92681", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { - "BODY": "ContainerAlreadyExistsThe specified container already exists.\nRequestId:9097b415-401e-0032-4dc8-f26a89000000\nTime:2021-12-16T22:04:18.9304631Z", + "BODY": "ContainerAlreadyExistsThe specified container already exists.\nRequestId:493db977-701e-0097-656e-888ccf000000\nTime:2022-06-25T08:33:04.6359117Z", "REASON_PHRASE": "The specified container already exists.", "STATUS_CODE": "409", "content-length": "230", "content-type": "application/xml", - "date": "Thu, 16 Dec 2021 22:04:18 GMT", + "date": "Sat, 25 Jun 2022 08:33:04 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "100ee672-a8fc-4840-6e02-67c02bf2766b", + "x-ms-client-request-id": "4192a549-8f08-4fd4-6e7e-85efbaa92681", "x-ms-error-code": "ContainerAlreadyExists", - "x-ms-request-id": "9097b415-401e-0032-4dc8-f26a89000000", - "x-ms-version": "2020-02-10" + "x-ms-request-id": "493db977-701e-0097-656e-888ccf000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier?restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "a4c089ba-c43f-4274-5e31-7ccd54d78790", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "a66a210e-4304-4937-5c0b-477f14dc3058", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -122,24 +124,24 @@ "REASON_PHRASE": "Accepted", "STATUS_CODE": "202", "content-length": "0", - "date": "Thu, 16 Dec 2021 22:04:18 GMT", - "etag": "\"0x8D9C0E002157D15\"", - "last-modified": "Thu, 16 Dec 2021 22:04:18 GMT", + "date": "Sat, 25 Jun 2022 08:33:04 GMT", + "etag": "\"0x8DA568553052627\"", + "last-modified": "Sat, 25 Jun 2022 08:33:04 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "a4c089ba-c43f-4274-5e31-7ccd54d78790", - "x-ms-copy-id": "945f5ef8-d16c-4725-94aa-06750c6a2f85", + "x-ms-client-request-id": "a66a210e-4304-4937-5c0b-477f14dc3058", + "x-ms-copy-id": "cbf0feff-0fea-4a42-9301-767704d03f5a", "x-ms-copy-status": "success", - "x-ms-request-id": "f29278bf-701e-0039-47c8-f291e2000000", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:04:18.9805845Z" + "x-ms-request-id": "493db9dd-701e-0097-426e-888ccf000000", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:33:04.9831975Z" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTierblob" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "b45cc05b-bcac-474e-5365-20d361647029", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "4b660780-eecf-463f-648c-1eae7fccba0a", + "x-ms-version": "2021-04-10" }, "Method": "HEAD", "Response": { @@ -154,38 +156,40 @@ "content-length": "8388608", "content-md5": "IFj7U/ZD/NWKjYOgVUI5Kw==", "content-type": "application/x-binary", - "date": "Thu, 16 Dec 2021 22:04:18 GMT", - "etag": "\"0x8D9C0E002157D15\"", - "last-modified": "Thu, 16 Dec 2021 22:04:18 GMT", + "date": "Sat, 25 Jun 2022 08:33:04 GMT", + "etag": "\"0x8DA568553052627\"", + "last-modified": "Sat, 25 Jun 2022 08:33:04 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", "x-ms-access-tier": "Cool", - "x-ms-access-tier-change-time": "Thu, 16 Dec 2021 22:04:18 GMT", + "x-ms-access-tier-change-time": "Sat, 25 Jun 2022 08:33:04 GMT", "x-ms-blob-type": "BlockBlob", - "x-ms-client-request-id": "b45cc05b-bcac-474e-5365-20d361647029", - "x-ms-copy-completion-time": "Thu, 16 Dec 2021 22:04:18 GMT", - "x-ms-copy-id": "945f5ef8-d16c-4725-94aa-06750c6a2f85", + "x-ms-client-request-id": "4b660780-eecf-463f-648c-1eae7fccba0a", + "x-ms-copy-completion-time": "Sat, 25 Jun 2022 08:33:04 GMT", + "x-ms-copy-id": "cbf0feff-0fea-4a42-9301-767704d03f5a", "x-ms-copy-progress": "8388608/8388608", - "x-ms-copy-source": "https://forcpprecordings.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTier", + "x-ms-copy-source": "https://euap.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTier", "x-ms-copy-status": "success", - "x-ms-creation-time": "Thu, 16 Dec 2021 22:04:18 GMT", + "x-ms-creation-time": "Sat, 25 Jun 2022 08:33:04 GMT", "x-ms-is-current-version": "true", + "x-ms-last-access-time": "Sat, 25 Jun 2022 08:33:04 GMT", "x-ms-lease-state": "available", "x-ms-lease-status": "unlocked", "x-ms-meta-key1": "value1", "x-ms-meta-key2": "value2", - "x-ms-request-id": "f29278d3-701e-0039-56c8-f291e2000000", + "x-ms-request-id": "493dba98-701e-0097-676e-888ccf000000", "x-ms-server-encrypted": "true", "x-ms-tag-count": "3", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:04:18.9805845Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:33:04.9831975Z" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTierblob" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "f821b509-6055-40e0-4cd2-e4fd3acdcb0e", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "5581ba07-fbca-4af2-6f78-e2b26eb6c951", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { @@ -194,19 +198,20 @@ "STATUS_CODE": "200", "content-length": "225", "content-type": "application/xml", - "date": "Thu, 16 Dec 2021 22:04:18 GMT", + "date": "Sat, 25 Jun 2022 08:33:05 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "f821b509-6055-40e0-4cd2-e4fd3acdcb0e", - "x-ms-request-id": "f29278e3-701e-0039-66c8-f291e2000000", - "x-ms-version": "2020-02-10" + "vary": "Origin", + "x-ms-client-request-id": "5581ba07-fbca-4af2-6f78-e2b26eb6c951", + "x-ms-request-id": "493dbb49-701e-0097-0c6e-888ccf000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTierblob?comp=tags" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "3a44bbde-1e9c-45f2-6798-ed427e14c965", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "e1bf4178-857c-4a43-5ef7-1db5db62b85a", + "x-ms-version": "2021-04-10" }, "Method": "HEAD", "Response": { @@ -221,38 +226,40 @@ "content-length": "8388608", "content-md5": "IFj7U/ZD/NWKjYOgVUI5Kw==", "content-type": "application/x-binary", - "date": "Thu, 16 Dec 2021 22:04:18 GMT", - "etag": "\"0x8D9C0E002157D15\"", - "last-modified": "Thu, 16 Dec 2021 22:04:18 GMT", + "date": "Sat, 25 Jun 2022 08:33:05 GMT", + "etag": "\"0x8DA568553052627\"", + "last-modified": "Sat, 25 Jun 2022 08:33:04 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", "x-ms-access-tier": "Cool", - "x-ms-access-tier-change-time": "Thu, 16 Dec 2021 22:04:18 GMT", + "x-ms-access-tier-change-time": "Sat, 25 Jun 2022 08:33:04 GMT", "x-ms-blob-type": "BlockBlob", - "x-ms-client-request-id": "3a44bbde-1e9c-45f2-6798-ed427e14c965", - "x-ms-copy-completion-time": "Thu, 16 Dec 2021 22:04:18 GMT", - "x-ms-copy-id": "945f5ef8-d16c-4725-94aa-06750c6a2f85", + "x-ms-client-request-id": "e1bf4178-857c-4a43-5ef7-1db5db62b85a", + "x-ms-copy-completion-time": "Sat, 25 Jun 2022 08:33:04 GMT", + "x-ms-copy-id": "cbf0feff-0fea-4a42-9301-767704d03f5a", "x-ms-copy-progress": "8388608/8388608", - "x-ms-copy-source": "https://forcpprecordings.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTier", + "x-ms-copy-source": "https://euap.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTier", "x-ms-copy-status": "success", - "x-ms-creation-time": "Thu, 16 Dec 2021 22:04:18 GMT", + "x-ms-creation-time": "Sat, 25 Jun 2022 08:33:04 GMT", "x-ms-is-current-version": "true", + "x-ms-last-access-time": "Sat, 25 Jun 2022 08:33:04 GMT", "x-ms-lease-state": "available", "x-ms-lease-status": "unlocked", "x-ms-meta-key1": "value1", "x-ms-meta-key2": "value2", - "x-ms-request-id": "f29278f2-701e-0039-72c8-f291e2000000", + "x-ms-request-id": "493dbbb5-701e-0097-6f6e-888ccf000000", "x-ms-server-encrypted": "true", "x-ms-tag-count": "3", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:04:18.9805845Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:33:04.9831975Z" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTierblob" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "b3a9fb6f-b2eb-4fc5-7d97-4bfb89fb14d6", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "9f7fcf73-3b47-46c2-70cd-cda588a6e28e", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -260,25 +267,26 @@ "REASON_PHRASE": "Accepted", "STATUS_CODE": "202", "content-length": "0", - "date": "Thu, 16 Dec 2021 22:04:18 GMT", - "etag": "\"0x8D9C0E0022A6A68\"", - "last-modified": "Thu, 16 Dec 2021 22:04:19 GMT", + "date": "Sat, 25 Jun 2022 08:33:06 GMT", + "etag": "\"0x8DA568553CE6111\"", + "last-modified": "Sat, 25 Jun 2022 08:33:06 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "b3a9fb6f-b2eb-4fc5-7d97-4bfb89fb14d6", + "x-ms-client-request-id": "9f7fcf73-3b47-46c2-70cd-cda588a6e28e", "x-ms-content-crc64": "DU01Kv81ewI=", - "x-ms-copy-id": "50498d84-8995-4f25-bbc3-cbc33921f867", + "x-ms-copy-id": "5da2d634-99ff-47da-809e-b5d0fc2ec8da", "x-ms-copy-status": "success", - "x-ms-request-id": "f29278f7-701e-0039-76c8-f291e2000000", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:04:19.2764164Z" + "x-ms-request-id": "493dbc52-701e-0097-746e-888ccf000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:33:06.5073218Z" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTierblob" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "be7281fe-7925-4dd4-528e-2dad35695bd0", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "d1171672-12be-48f7-788b-eb6c6754394d", + "x-ms-version": "2021-04-10" }, "Method": "GET", "Response": { @@ -287,19 +295,20 @@ "STATUS_CODE": "200", "content-length": "225", "content-type": "application/xml", - "date": "Thu, 16 Dec 2021 22:04:18 GMT", + "date": "Sat, 25 Jun 2022 08:33:06 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "be7281fe-7925-4dd4-528e-2dad35695bd0", - "x-ms-request-id": "f2927977-701e-0039-6dc8-f291e2000000", - "x-ms-version": "2020-02-10" + "vary": "Origin", + "x-ms-client-request-id": "d1171672-12be-48f7-788b-eb6c6754394d", + "x-ms-request-id": "493dbd7b-701e-0097-7f6e-888ccf000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTierblob?comp=tags" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "36cae37f-2538-4752-5030-947db4ad0ef4", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "1bbe7c71-9919-41d4-67ea-ac82c70cc776", + "x-ms-version": "2021-04-10" }, "Method": "HEAD", "Response": { @@ -314,38 +323,89 @@ "content-length": "8388608", "content-md5": "IFj7U/ZD/NWKjYOgVUI5Kw==", "content-type": "application/x-binary", - "date": "Thu, 16 Dec 2021 22:04:18 GMT", - "etag": "\"0x8D9C0E0022A6A68\"", - "last-modified": "Thu, 16 Dec 2021 22:04:19 GMT", + "date": "Sat, 25 Jun 2022 08:33:06 GMT", + "etag": "\"0x8DA568553CE6111\"", + "last-modified": "Sat, 25 Jun 2022 08:33:06 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", "x-ms-access-tier": "Cool", - "x-ms-access-tier-change-time": "Thu, 16 Dec 2021 22:04:19 GMT", + "x-ms-access-tier-change-time": "Sat, 25 Jun 2022 08:33:06 GMT", "x-ms-blob-type": "BlockBlob", - "x-ms-client-request-id": "36cae37f-2538-4752-5030-947db4ad0ef4", - "x-ms-copy-completion-time": "Thu, 16 Dec 2021 22:04:19 GMT", - "x-ms-copy-id": "50498d84-8995-4f25-bbc3-cbc33921f867", + "x-ms-client-request-id": "1bbe7c71-9919-41d4-67ea-ac82c70cc776", + "x-ms-copy-completion-time": "Sat, 25 Jun 2022 08:33:06 GMT", + "x-ms-copy-id": "5da2d634-99ff-47da-809e-b5d0fc2ec8da", "x-ms-copy-progress": "8388608/8388608", - "x-ms-copy-source": "https://forcpprecordings.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTier?se=2021-12-19T22:04:19Z&sp=racwdxlt&spr=https,http&sr=c&sv=2020-02-10", + "x-ms-copy-source": "https://euap.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTier?se=2022-06-28T08:33:06Z&sp=racwdxlti&spr=https,http&sr=c&sv=2021-04-10", "x-ms-copy-status": "success", - "x-ms-creation-time": "Thu, 16 Dec 2021 22:04:19 GMT", + "x-ms-creation-time": "Sat, 25 Jun 2022 08:33:06 GMT", "x-ms-is-current-version": "true", + "x-ms-last-access-time": "Sat, 25 Jun 2022 08:33:06 GMT", "x-ms-lease-state": "available", "x-ms-lease-status": "unlocked", "x-ms-meta-key1": "value1", "x-ms-meta-key2": "value2", - "x-ms-request-id": "f292797c-701e-0039-72c8-f291e2000000", + "x-ms-request-id": "493dbe65-701e-0097-5a6e-888ccf000000", "x-ms-server-encrypted": "true", "x-ms-tag-count": "3", - "x-ms-version": "2020-02-10", - "x-ms-version-id": "2021-12-16T22:04:19.2764164Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:33:06.5073218Z" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTierblob" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.2.1 (Linux 5.4.0-1063-azure x86_64 #66~18.04.1-Ubuntu SMP Thu Oct 21 09:59:28 UTC 2021)", - "x-ms-client-request-id": "4fbcc750-e5ae-45eb-7372-f90dc49649fa", - "x-ms-version": "2020-02-10" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "f6550362-64c1-4e2b-7595-a8cf98f57ddf", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Accepted", + "STATUS_CODE": "202", + "content-length": "0", + "date": "Sat, 25 Jun 2022 08:33:09 GMT", + "etag": "\"0x8DA56855480CE9F\"", + "last-modified": "Sat, 25 Jun 2022 08:33:07 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "f6550362-64c1-4e2b-7595-a8cf98f57ddf", + "x-ms-content-crc64": "DU01Kv81ewI=", + "x-ms-copy-id": "671e0096-5d20-4fb2-8571-45b304b27e77", + "x-ms-copy-status": "success", + "x-ms-request-id": "493dbf60-701e-0097-446e-888ccf000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:33:10.2121924Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTierblob" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "2dff27e6-7c8b-4677-5651-0786d6fa3b35", + "x-ms-version": "2021-04-10" + }, + "Method": "GET", + "Response": { + "BODY": "\n", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "content-length": "64", + "content-type": "application/xml", + "date": "Sat, 25 Jun 2022 08:33:10 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", + "x-ms-client-request-id": "2dff27e6-7c8b-4677-5651-0786d6fa3b35", + "x-ms-request-id": "493dc6d5-701e-0097-116e-888ccf000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier/CopyWithTagsMetadataTierblob?comp=tags" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "1b6c5ce6-7954-4300-6355-a33a8eaaa52e", + "x-ms-version": "2021-04-10" }, "Method": "DELETE", "Response": { @@ -353,11 +413,11 @@ "REASON_PHRASE": "Accepted", "STATUS_CODE": "202", "content-length": "0", - "date": "Thu, 16 Dec 2021 22:04:18 GMT", + "date": "Sat, 25 Jun 2022 08:33:10 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "4fbcc750-e5ae-45eb-7372-f90dc49649fa", - "x-ms-request-id": "f2927987-701e-0039-7dc8-f291e2000000", - "x-ms-version": "2020-02-10" + "x-ms-client-request-id": "1b6c5ce6-7954-4300-6355-a33a8eaaa52e", + "x-ms-request-id": "493dc777-701e-0097-286e-888ccf000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestcopywithtagsmetadatatier?restype=container" } diff --git a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlockBlobClientTest.SyncCopyFromUriEncryptionScope.json b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlockBlobClientTest.SyncCopyFromUriEncryptionScope.json new file mode 100644 index 0000000000..1d8d53536b --- /dev/null +++ b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlockBlobClientTest.SyncCopyFromUriEncryptionScope.json @@ -0,0 +1,270 @@ +{ + "networkCallRecords": [ + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "18525e7b-72ee-4074-64c6-8567d0f90d58", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 10:42:08 GMT", + "etag": "\"0x8DA56975A9A5D24\"", + "last-modified": "Sat, 25 Jun 2022 10:42:08 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "18525e7b-72ee-4074-64c6-8567d0f90d58", + "x-ms-request-id": "7db12147-701e-005c-3980-888f9a000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestsynccopyfromuriencryptionscope?restype=container" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "d3f3a901-06c0-490a-78e8-ed4fa5255089", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "content-md5": "oulw8XCWHOh5GQ1kmCyU7A==", + "date": "Sat, 25 Jun 2022 10:42:08 GMT", + "etag": "\"0x8DA56975ACF665B\"", + "last-modified": "Sat, 25 Jun 2022 10:42:08 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "d3f3a901-06c0-490a-78e8-ed4fa5255089", + "x-ms-content-crc64": "CCucyRQQkvc=", + "x-ms-encryption-scope": "EncryptionScopeForTest", + "x-ms-request-id": "7db12165-701e-005c-4d80-888f9a000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T10:42:08.9938523Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestsynccopyfromuriencryptionscope/b" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "2c0ed87c-c550-4cba-7603-b99779cf4eb9", + "x-ms-version": "2021-04-10" + }, + "Method": "HEAD", + "Response": { + "BODY": "", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "accept-ranges": "bytes", + "content-length": "1", + "content-md5": "oulw8XCWHOh5GQ1kmCyU7A==", + "content-type": "application/octet-stream", + "date": "Sat, 25 Jun 2022 10:42:09 GMT", + "etag": "\"0x8DA56975ACF665B\"", + "last-modified": "Sat, 25 Jun 2022 10:42:08 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", + "x-ms-access-tier": "Hot", + "x-ms-access-tier-inferred": "true", + "x-ms-blob-type": "BlockBlob", + "x-ms-client-request-id": "2c0ed87c-c550-4cba-7603-b99779cf4eb9", + "x-ms-creation-time": "Sat, 25 Jun 2022 10:42:08 GMT", + "x-ms-encryption-scope": "EncryptionScopeForTest", + "x-ms-is-current-version": "true", + "x-ms-last-access-time": "Sat, 25 Jun 2022 10:42:08 GMT", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "7db1218f-701e-005c-6b80-888f9a000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T10:42:08.9938523Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestsynccopyfromuriencryptionscope/b" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "eb65ca72-479a-4038-46dc-362eccfb4a3e", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "ContainerAlreadyExistsThe specified container already exists.\nRequestId:b094243f-e01e-0061-1980-88f981000000\nTime:2022-06-25T10:42:10.7810686Z", + "REASON_PHRASE": "The specified container already exists.", + "STATUS_CODE": "409", + "content-length": "230", + "content-type": "application/xml", + "date": "Sat, 25 Jun 2022 10:42:10 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "eb65ca72-479a-4038-46dc-362eccfb4a3e", + "x-ms-error-code": "ContainerAlreadyExists", + "x-ms-request-id": "b094243f-e01e-0061-1980-88f981000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestsynccopyfromuriencryptionscope?restype=container" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "f4112cb8-949f-4bb4-5ed6-b8263c6df8ae", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Accepted", + "STATUS_CODE": "202", + "content-length": "0", + "date": "Sat, 25 Jun 2022 10:42:11 GMT", + "etag": "\"0x8DA56975C80B0CF\"", + "last-modified": "Sat, 25 Jun 2022 10:42:11 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "f4112cb8-949f-4bb4-5ed6-b8263c6df8ae", + "x-ms-content-crc64": "CCucyRQQkvc=", + "x-ms-copy-id": "dd2ee348-bd30-4036-b9b5-686db1ea6db6", + "x-ms-copy-status": "success", + "x-ms-request-id": "b0942488-e01e-0061-5280-88f981000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T10:42:12.0081191Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestsynccopyfromuriencryptionscope/SyncCopyFromUriEncryptionScope" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "2a9b78b4-c94d-4699-49bb-8ee631dfef0f", + "x-ms-version": "2021-04-10" + }, + "Method": "HEAD", + "Response": { + "BODY": "", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "accept-ranges": "bytes", + "content-length": "1", + "content-md5": "oulw8XCWHOh5GQ1kmCyU7A==", + "content-type": "application/octet-stream", + "date": "Sat, 25 Jun 2022 10:42:11 GMT", + "etag": "\"0x8DA56975C80B0CF\"", + "last-modified": "Sat, 25 Jun 2022 10:42:11 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", + "x-ms-access-tier": "Hot", + "x-ms-access-tier-inferred": "true", + "x-ms-blob-type": "BlockBlob", + "x-ms-client-request-id": "2a9b78b4-c94d-4699-49bb-8ee631dfef0f", + "x-ms-copy-completion-time": "Sat, 25 Jun 2022 10:42:11 GMT", + "x-ms-copy-id": "dd2ee348-bd30-4036-b9b5-686db1ea6db6", + "x-ms-copy-progress": "1/1", + "x-ms-copy-source": "https://euap.blob.core.windows.net/blockblobclienttestsynccopyfromuriencryptionscope/b?se=2022-06-25T11:42:09Z&ses=EncryptionScopeForTest&sp=r&spr=https&sr=b&sv=2021-04-10", + "x-ms-copy-status": "success", + "x-ms-creation-time": "Sat, 25 Jun 2022 10:42:11 GMT", + "x-ms-is-current-version": "true", + "x-ms-last-access-time": "Sat, 25 Jun 2022 10:42:11 GMT", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "b09425d0-e01e-0061-6d80-88f981000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T10:42:12.0081191Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestsynccopyfromuriencryptionscope/SyncCopyFromUriEncryptionScope" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "6e498011-4bc4-45e2-6ca4-a72e6c9861ee", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Accepted", + "STATUS_CODE": "202", + "content-length": "0", + "date": "Sat, 25 Jun 2022 10:42:11 GMT", + "etag": "\"0x8DA56975CFDE4D3\"", + "last-modified": "Sat, 25 Jun 2022 10:42:12 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "6e498011-4bc4-45e2-6ca4-a72e6c9861ee", + "x-ms-content-crc64": "CCucyRQQkvc=", + "x-ms-copy-id": "646f3479-cf89-4287-a096-ecaeec84d1e7", + "x-ms-copy-status": "success", + "x-ms-encryption-scope": "EncryptionScopeForTest", + "x-ms-request-id": "b094262d-e01e-0061-4080-88f981000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T10:42:12.6667408Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestsynccopyfromuriencryptionscope/SyncCopyFromUriEncryptionScope" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "57dc3581-50e7-4f6f-42ca-349d13affe16", + "x-ms-version": "2021-04-10" + }, + "Method": "HEAD", + "Response": { + "BODY": "", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "accept-ranges": "bytes", + "content-length": "1", + "content-md5": "oulw8XCWHOh5GQ1kmCyU7A==", + "content-type": "application/octet-stream", + "date": "Sat, 25 Jun 2022 10:42:12 GMT", + "etag": "\"0x8DA56975CFDE4D3\"", + "last-modified": "Sat, 25 Jun 2022 10:42:12 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", + "x-ms-access-tier": "Hot", + "x-ms-access-tier-inferred": "true", + "x-ms-blob-type": "BlockBlob", + "x-ms-client-request-id": "57dc3581-50e7-4f6f-42ca-349d13affe16", + "x-ms-copy-completion-time": "Sat, 25 Jun 2022 10:42:12 GMT", + "x-ms-copy-id": "646f3479-cf89-4287-a096-ecaeec84d1e7", + "x-ms-copy-progress": "1/1", + "x-ms-copy-source": "https://euap.blob.core.windows.net/blockblobclienttestsynccopyfromuriencryptionscope/b?se=2022-06-28T10:42:12Z&sp=racwdxlti&spr=https,http&sr=c&sv=2021-04-10", + "x-ms-copy-status": "success", + "x-ms-creation-time": "Sat, 25 Jun 2022 10:42:12 GMT", + "x-ms-encryption-scope": "EncryptionScopeForTest", + "x-ms-is-current-version": "true", + "x-ms-last-access-time": "Sat, 25 Jun 2022 10:42:12 GMT", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-request-id": "b0942676-e01e-0061-7e80-88f981000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T10:42:12.6667408Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestsynccopyfromuriencryptionscope/SyncCopyFromUriEncryptionScope" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "d0603541-cf85-4f58-64ca-f032c5755aa6", + "x-ms-version": "2021-04-10" + }, + "Method": "DELETE", + "Response": { + "BODY": "", + "REASON_PHRASE": "Accepted", + "STATUS_CODE": "202", + "content-length": "0", + "date": "Sat, 25 Jun 2022 10:42:12 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "d0603541-cf85-4f58-64ca-f032c5755aa6", + "x-ms-request-id": "b09426b4-e01e-0061-3280-88f981000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestsynccopyfromuriencryptionscope?restype=container" + } + ] +} diff --git a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlockBlobClientTest.UploadFromUri.json b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlockBlobClientTest.UploadFromUri.json index 1198ae4050..168cd90e47 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/recordings/BlockBlobClientTest.UploadFromUri.json +++ b/sdk/storage/azure-storage-blobs/test/ut/recordings/BlockBlobClientTest.UploadFromUri.json @@ -2,9 +2,9 @@ "networkCallRecords": [ { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "84fcb7ca-fda3-4111-6c4d-1b5fd28bfc8a", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "67b0d7d2-83bf-4544-52c5-a7e561d6cc68", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -12,21 +12,21 @@ "REASON_PHRASE": "Created", "STATUS_CODE": "201", "content-length": "0", - "date": "Sun, 20 Feb 2022 07:09:23 GMT", - "etag": "\"0x8D9F43FEC8C86B7\"", - "last-modified": "Sun, 20 Feb 2022 07:09:23 GMT", + "date": "Sat, 25 Jun 2022 08:35:55 GMT", + "etag": "\"0x8DA5685B9381135\"", + "last-modified": "Sat, 25 Jun 2022 08:35:56 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "84fcb7ca-fda3-4111-6c4d-1b5fd28bfc8a", - "x-ms-request-id": "29d5e0bd-f01e-0042-4228-266342000000", - "x-ms-version": "2020-08-04" + "x-ms-client-request-id": "67b0d7d2-83bf-4544-52c5-a7e561d6cc68", + "x-ms-request-id": "d8f62ac8-801e-002a-096e-8805d2000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestuploadfromuri?restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "834a37a6-a281-43c0-5b89-f17f09504bc9", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "18f63ab3-f9e9-4970-42b1-4eb151f031f4", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -35,46 +35,66 @@ "STATUS_CODE": "201", "content-length": "0", "content-md5": "NqksyUqeD6IfYl+L+wB63w==", - "date": "Sun, 20 Feb 2022 07:09:23 GMT", - "etag": "\"0x8D9F43FECB1518C\"", - "last-modified": "Sun, 20 Feb 2022 07:09:24 GMT", + "date": "Sat, 25 Jun 2022 08:35:55 GMT", + "etag": "\"0x8DA5685B96E3A14\"", + "last-modified": "Sat, 25 Jun 2022 08:35:56 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "834a37a6-a281-43c0-5b89-f17f09504bc9", + "x-ms-client-request-id": "18f63ab3-f9e9-4970-42b1-4eb151f031f4", "x-ms-content-crc64": "eeIkJntVfP0=", - "x-ms-request-id": "29d5e126-f01e-0042-2028-266342000000", + "x-ms-request-id": "d8f62b2d-801e-002a-5d6e-8805d2000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2022-02-20T07:09:24.0796556Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:35:56.7994388Z" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestuploadfromuri/UploadFromUrisrc" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "39306e7d-ff5a-4915-7056-e9406f87f5f7", - "x-ms-version": "2020-08-04" + "content-type": "application/xml; charset=UTF-8", + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "cb8fd8a7-1c9e-4f6b-41a9-a6f79e80ec37", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { - "BODY": "ContainerAlreadyExistsThe specified container already exists.\nRequestId:29d5e18f-f01e-0042-7c28-266342000000\nTime:2022-02-20T07:09:24.3192637Z", + "BODY": "", + "REASON_PHRASE": "No Content", + "STATUS_CODE": "204", + "date": "Sat, 25 Jun 2022 08:35:56 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "cb8fd8a7-1c9e-4f6b-41a9-a6f79e80ec37", + "x-ms-request-id": "d8f62b7a-801e-002a-216e-8805d2000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestuploadfromuri/UploadFromUrisrc?comp=tags" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "93c2cbea-83c3-43dd-4ed0-15e39e983666", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "ContainerAlreadyExistsThe specified container already exists.\nRequestId:0abe50d6-801e-0067-086e-88ca3e000000\nTime:2022-06-25T08:35:58.5742177Z", "REASON_PHRASE": "The specified container already exists.", "STATUS_CODE": "409", "content-length": "230", "content-type": "application/xml", - "date": "Sun, 20 Feb 2022 07:09:23 GMT", + "date": "Sat, 25 Jun 2022 08:35:58 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "39306e7d-ff5a-4915-7056-e9406f87f5f7", + "x-ms-client-request-id": "93c2cbea-83c3-43dd-4ed0-15e39e983666", "x-ms-error-code": "ContainerAlreadyExists", - "x-ms-request-id": "29d5e18f-f01e-0042-7c28-266342000000", - "x-ms-version": "2020-08-04" + "x-ms-request-id": "0abe50d6-801e-0067-086e-88ca3e000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestuploadfromuri?restype=container" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "369cc4e3-19c9-4cb6-5738-4ccb9ffd0cad", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "1a0438ef-eef1-442b-76df-5f63644f0c3b", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -82,24 +102,24 @@ "REASON_PHRASE": "Created", "STATUS_CODE": "201", "content-length": "0", - "date": "Sun, 20 Feb 2022 07:09:24 GMT", - "etag": "\"0x8D9F43FED2BEDF1\"", - "last-modified": "Sun, 20 Feb 2022 07:09:24 GMT", + "date": "Sat, 25 Jun 2022 08:35:59 GMT", + "etag": "\"0x8DA5685BB846F69\"", + "last-modified": "Sat, 25 Jun 2022 08:36:00 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "369cc4e3-19c9-4cb6-5738-4ccb9ffd0cad", + "x-ms-client-request-id": "1a0438ef-eef1-442b-76df-5f63644f0c3b", "x-ms-content-crc64": "eeIkJntVfP0=", - "x-ms-request-id": "29d5e1eb-f01e-0042-4e28-266342000000", + "x-ms-request-id": "0abe511b-801e-0067-3c6e-88ca3e000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2022-02-20T07:09:24.8831985Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:36:00.3004265Z" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestuploadfromuri/UploadFromUridest" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "ff0dda4c-5d74-4015-6c1b-553b3fe1db6f", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "50eba16e-87e6-4030-4581-0e8f9b72cfe4", + "x-ms-version": "2021-04-10" }, "Method": "PUT", "Response": { @@ -107,24 +127,24 @@ "REASON_PHRASE": "Created", "STATUS_CODE": "201", "content-length": "0", - "date": "Sun, 20 Feb 2022 07:09:24 GMT", - "etag": "\"0x8D9F43FED54098A\"", - "last-modified": "Sun, 20 Feb 2022 07:09:25 GMT", + "date": "Sat, 25 Jun 2022 08:36:00 GMT", + "etag": "\"0x8DA5685BBB90C39\"", + "last-modified": "Sat, 25 Jun 2022 08:36:00 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "ff0dda4c-5d74-4015-6c1b-553b3fe1db6f", + "x-ms-client-request-id": "50eba16e-87e6-4030-4581-0e8f9b72cfe4", "x-ms-content-crc64": "eeIkJntVfP0=", - "x-ms-request-id": "29d5e2c8-f01e-0042-0928-266342000000", + "x-ms-request-id": "0abe5245-801e-0067-266e-88ca3e000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2022-02-20T07:09:25.1480484Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:36:00.6472274Z" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestuploadfromuri/UploadFromUridest" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "3b22ec6c-5928-4bb4-5090-ca11043d7340", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "21280641-6c84-4fe8-7e8a-46e51aed048c", + "x-ms-version": "2021-04-10" }, "Method": "HEAD", "Response": { @@ -136,34 +156,81 @@ "content-length": "100", "content-md5": "NqksyUqeD6IfYl+L+wB63w==", "content-type": "application/octet-stream", - "date": "Sun, 20 Feb 2022 07:09:25 GMT", - "etag": "\"0x8D9F43FED54098A\"", - "last-modified": "Sun, 20 Feb 2022 07:09:25 GMT", + "date": "Sat, 25 Jun 2022 08:36:00 GMT", + "etag": "\"0x8DA5685BBB90C39\"", + "last-modified": "Sat, 25 Jun 2022 08:36:00 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", "vary": "Origin", "x-ms-access-tier": "Cool", - "x-ms-access-tier-change-time": "Sun, 20 Feb 2022 07:09:25 GMT", + "x-ms-access-tier-change-time": "Sat, 25 Jun 2022 08:36:00 GMT", "x-ms-blob-type": "BlockBlob", - "x-ms-client-request-id": "3b22ec6c-5928-4bb4-5090-ca11043d7340", - "x-ms-creation-time": "Sun, 20 Feb 2022 07:09:25 GMT", + "x-ms-client-request-id": "21280641-6c84-4fe8-7e8a-46e51aed048c", + "x-ms-creation-time": "Sat, 25 Jun 2022 08:36:00 GMT", "x-ms-is-current-version": "true", - "x-ms-last-access-time": "Sun, 20 Feb 2022 07:09:25 GMT", + "x-ms-last-access-time": "Sat, 25 Jun 2022 08:36:00 GMT", "x-ms-lease-state": "available", "x-ms-lease-status": "unlocked", "x-ms-meta-k": "v", - "x-ms-request-id": "29d5e327-f01e-0042-5a28-266342000000", + "x-ms-request-id": "0abe5296-801e-0067-6c6e-88ca3e000000", "x-ms-server-encrypted": "true", "x-ms-tag-count": "1", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2022-02-20T07:09:25.1480484Z" + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:36:00.6472274Z" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestuploadfromuri/UploadFromUridest" }, { "Headers": { - "user-agent": "azsdk-cpp-storage-blobs/12.4.0-beta.1 (Windows 10 Pro 6.3 19041 19041.1.amd64fre.vb_release.191206-1406)", - "x-ms-client-request-id": "597a38e1-cccb-4806-7066-5f71235fa1bc", - "x-ms-version": "2020-08-04" + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "d4b00e3d-6917-41a2-4bf1-aa2f71234888", + "x-ms-version": "2021-04-10" + }, + "Method": "PUT", + "Response": { + "BODY": "", + "REASON_PHRASE": "Created", + "STATUS_CODE": "201", + "content-length": "0", + "date": "Sat, 25 Jun 2022 08:36:01 GMT", + "etag": "\"0x8DA5685BC4029B6\"", + "last-modified": "Sat, 25 Jun 2022 08:36:01 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "x-ms-client-request-id": "d4b00e3d-6917-41a2-4bf1-aa2f71234888", + "x-ms-content-crc64": "eeIkJntVfP0=", + "x-ms-request-id": "0abe52e1-801e-0067-2e6e-88ca3e000000", + "x-ms-request-server-encrypted": "true", + "x-ms-version": "2021-04-10", + "x-ms-version-id": "2022-06-25T08:36:01.5317190Z" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestuploadfromuri/UploadFromUridest" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "f367c302-0906-4b49-6a8b-034327cc7eab", + "x-ms-version": "2021-04-10" + }, + "Method": "GET", + "Response": { + "BODY": "\nsrctagsa1212", + "REASON_PHRASE": "OK", + "STATUS_CODE": "200", + "content-length": "121", + "content-type": "application/xml", + "date": "Sat, 25 Jun 2022 08:36:03 GMT", + "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", + "vary": "Origin", + "x-ms-client-request-id": "f367c302-0906-4b49-6a8b-034327cc7eab", + "x-ms-request-id": "0abe5355-801e-0067-196e-88ca3e000000", + "x-ms-version": "2021-04-10" + }, + "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestuploadfromuri/UploadFromUridest?comp=tags" + }, + { + "Headers": { + "user-agent": "azsdk-cpp-storage-blobs/12.5.0-beta.2 (Windows 10 Pro 6.3 19044 19041.1.amd64fre.vb_release.191206-1406)", + "x-ms-client-request-id": "a4648ef8-9309-463c-7938-4247079b46bd", + "x-ms-version": "2021-04-10" }, "Method": "DELETE", "Response": { @@ -171,11 +238,11 @@ "REASON_PHRASE": "Accepted", "STATUS_CODE": "202", "content-length": "0", - "date": "Sun, 20 Feb 2022 07:09:25 GMT", + "date": "Sat, 25 Jun 2022 08:36:03 GMT", "server": "Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0", - "x-ms-client-request-id": "597a38e1-cccb-4806-7066-5f71235fa1bc", - "x-ms-request-id": "29d5e380-f01e-0042-2928-266342000000", - "x-ms-version": "2020-08-04" + "x-ms-client-request-id": "a4648ef8-9309-463c-7938-4247079b46bd", + "x-ms-request-id": "0abe5479-801e-0067-086e-88ca3e000000", + "x-ms-version": "2021-04-10" }, "Url": "https://REDACTED.blob.core.windows.net/blockblobclienttestuploadfromuri?restype=container" } diff --git a/sdk/storage/azure-storage-common/CHANGELOG.md b/sdk/storage/azure-storage-common/CHANGELOG.md index 82e7ca3244..f6ebc96202 100644 --- a/sdk/storage/azure-storage-common/CHANGELOG.md +++ b/sdk/storage/azure-storage-common/CHANGELOG.md @@ -4,6 +4,9 @@ ### Features Added +- Added support for encryption scope SAS (`ses` query parameter in SAS token). +- Added support for permanent delete permission in SAS. + ### Breaking Changes ### Bugs Fixed diff --git a/sdk/storage/azure-storage-common/inc/azure/storage/common/account_sas_builder.hpp b/sdk/storage/azure-storage-common/inc/azure/storage/common/account_sas_builder.hpp index ae1912f489..359f16a389 100644 --- a/sdk/storage/azure-storage-common/inc/azure/storage/common/account_sas_builder.hpp +++ b/sdk/storage/azure-storage-common/inc/azure/storage/common/account_sas_builder.hpp @@ -188,6 +188,11 @@ namespace Azure { namespace Storage { namespace Sas { */ SetImmutabilityPolicy = 2048, + /** + * @brief Indicates that permanent delete is permitted. + */ + PermanentDelete = 4096, + /** * @brief Indicates that all permissions are set. */ @@ -250,6 +255,11 @@ namespace Azure { namespace Storage { namespace Sas { */ AccountSasResource ResourceTypes; + /** + * @brief Optional encryption scope to use when sending requests authorized with this SAS url. + */ + std::string EncryptionScope; + /** * @brief Sets the permissions for an account SAS. * diff --git a/sdk/storage/azure-storage-common/src/account_sas_builder.cpp b/sdk/storage/azure-storage-common/src/account_sas_builder.cpp index 42e94d31cf..2a64dc90a4 100644 --- a/sdk/storage/azure-storage-common/src/account_sas_builder.cpp +++ b/sdk/storage/azure-storage-common/src/account_sas_builder.cpp @@ -9,7 +9,7 @@ namespace Azure { namespace Storage { namespace Sas { namespace { - constexpr static const char* SasVersion = "2020-08-04"; + constexpr static const char* SasVersion = "2021-04-10"; } void AccountSasBuilder::SetPermissions(AccountSasPermissions permissions) @@ -32,6 +32,11 @@ namespace Azure { namespace Storage { namespace Sas { { Permissions += "x"; } + if ((permissions & AccountSasPermissions::PermanentDelete) + == AccountSasPermissions::PermanentDelete) + { + Permissions += "y"; + } if ((permissions & AccountSasPermissions::List) == AccountSasPermissions::List) { Permissions += "l"; @@ -108,7 +113,8 @@ namespace Azure { namespace Storage { namespace Sas { std::string stringToSign = credential.AccountName + "\n" + Permissions + "\n" + services + "\n" + resourceTypes + "\n" + startsOnStr + "\n" + expiresOnStr + "\n" - + (IPRange.HasValue() ? IPRange.Value() : "") + "\n" + protocol + "\n" + SasVersion + "\n"; + + (IPRange.HasValue() ? IPRange.Value() : "") + "\n" + protocol + "\n" + SasVersion + "\n" + + EncryptionScope + "\n"; std::string signature = Azure::Core::Convert::Base64Encode(_internal::HmacSha256( std::vector(stringToSign.begin(), stringToSign.end()), @@ -130,6 +136,10 @@ namespace Azure { namespace Storage { namespace Sas { } builder.AppendQueryParameter("spr", _internal::UrlEncodeQueryParameter(protocol)); builder.AppendQueryParameter("sig", _internal::UrlEncodeQueryParameter(signature)); + if (!EncryptionScope.empty()) + { + builder.AppendQueryParameter("ses", _internal::UrlEncodeQueryParameter(EncryptionScope)); + } return builder.GetAbsoluteUrl(); } diff --git a/sdk/storage/test-resources-post.ps1 b/sdk/storage/test-resources-post.ps1 index 268ab57d46..539c242e10 100644 --- a/sdk/storage/test-resources-post.ps1 +++ b/sdk/storage/test-resources-post.ps1 @@ -1,6 +1,13 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. +param( + [string] $ResourceGroupName, + [hashtable] $DeploymentOutputs +) + +New-AzStorageEncryptionScope -ResourceGroupName $ResourceGroupName -StorageAccountName $DeploymentOutputs['ACCOUNT_NAME'] -EncryptionScopeName "EncryptionScopeForTest" -StorageEncryption + # This script is used to wait until XCache is refreshed for the service properties (30s), and role assignment takes effect (300s). Start-Sleep -s 300