From 619189ff7bda5eebcbfeb339c0cb8b539e79f4e5 Mon Sep 17 00:00:00 2001 From: Amanda Nguyen <48961492+amnguye@users.noreply.github.com> Date: Fri, 4 Jun 2021 10:59:17 -0700 Subject: [PATCH] Fixed regression in BlobProperties where IsLatestVersion was not set (#21550) * Fixed regression in BlobProperties where IsLatestVersion was not setting the value * Rerecorded one more test * Update BlobProperties to set properties by using internal constructor * Updated tests to remove unused BlobProperties * Make BlobProperties properties internal --- sdk/storage/Azure.Storage.Blobs/CHANGELOG.md | 1 + .../Azure.Storage.Blobs/src/BlobExtensions.cs | 87 +++-- .../src/Models/BlobProperties.cs | 177 ++++++--- .../src/Models/BlobsModelFactory.cs | 342 +++++++++--------- .../tests/BlobBaseClientTests.cs | 9 +- .../tests/PartitionedDownloaderTests.cs | 18 - .../GetPropertiesAsync_Version.json | 165 ++++++--- .../GetPropertiesAsync_VersionAsync.json | 165 ++++++--- 8 files changed, 572 insertions(+), 392 deletions(-) diff --git a/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md b/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md index c21a6c6dafbf2..3c5e32be5f8c7 100644 --- a/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md +++ b/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md @@ -4,6 +4,7 @@ - Fixed bug where BlobClient.DownloadStreaming or BlobClient.DownloadData could corrupt data on retry. - Fixed bug where specifying "*" as IfMatch condition could lead to inconsistend read in BlobClient.DownloadTo. - Fixed bug where specifying conditions in BlobBaseClient.OpenRead could override allowModifications flag in BlobOpenReadOptions leading to inconsistent read. +- Fixed bug where BlobProperties.IsLatestVersion from BlobBaseClient.GetProperties did not set the value (defaulted to false). ## 12.8.4 (2021-05-20) - Fixed bug where Client Side Encryption during large transactions (greater than max int value) would throw an exception. diff --git a/sdk/storage/Azure.Storage.Blobs/src/BlobExtensions.cs b/sdk/storage/Azure.Storage.Blobs/src/BlobExtensions.cs index fbc66f2764e15..dfc4062bacbca 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/BlobExtensions.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/BlobExtensions.cs @@ -723,53 +723,52 @@ internal static BlobProperties ToBlobProperties(this ResponseWithHeaders 0 ? BlobExtensions.ParseObjectReplicationIds(response.Headers.ObjectReplicationRules) : null, - BlobType = response.Headers.BlobType.GetValueOrDefault(), - CopyCompletedOn = response.Headers.CopyCompletionTime.GetValueOrDefault(), - CopyStatusDescription = response.Headers.CopyStatusDescription, - CopyId = response.Headers.CopyId, - CopyProgress = response.Headers.CopyProgress, - CopySource = response.Headers.CopySource == null ? null : new Uri(response.Headers.CopySource), - CopyStatus = response.Headers.CopyStatus.GetValueOrDefault(), - IsIncrementalCopy = response.Headers.IsIncrementalCopy.GetValueOrDefault(), - DestinationSnapshot = response.Headers.DestinationSnapshot, - LeaseDuration = response.Headers.LeaseDuration.GetValueOrDefault(), - LeaseState = response.Headers.LeaseState.GetValueOrDefault(), - LeaseStatus = response.Headers.LeaseStatus.GetValueOrDefault(), - ContentLength = response.Headers.ContentLength.GetValueOrDefault(), - ContentType = response.Headers.ContentType, - ETag = response.GetRawResponse().Headers.ETag.GetValueOrDefault(), - ContentHash = response.Headers.ContentMD5, - ContentEncoding = response.Headers.ContentEncoding, - ContentDisposition = response.Headers.ContentDisposition, - ContentLanguage = response.Headers.ContentLanguage, - CacheControl = response.Headers.CacheControl, - BlobSequenceNumber = response.Headers.BlobSequenceNumber.GetValueOrDefault(), - AcceptRanges = response.Headers.AcceptRanges, - BlobCommittedBlockCount = response.Headers.BlobCommittedBlockCount.GetValueOrDefault(), - IsServerEncrypted = response.Headers.IsServerEncrypted.GetValueOrDefault(), - EncryptionKeySha256 = response.Headers.EncryptionKeySha256, - EncryptionScope = response.Headers.EncryptionScope, - AccessTier = response.Headers.AccessTier, - AccessTierInferred = response.Headers.AccessTierInferred.GetValueOrDefault(), - ArchiveStatus = response.Headers.ArchiveStatus, - AccessTierChangedOn = response.Headers.AccessTierChangeTime.GetValueOrDefault(), - VersionId = response.Headers.VersionId, - TagCount = response.Headers.TagCount.GetValueOrDefault(), - ExpiresOn = response.Headers.ExpiresOn.GetValueOrDefault(), - IsSealed = response.Headers.IsSealed.GetValueOrDefault(), - RehydratePriority = response.Headers.RehydratePriority, - LastAccessed = response.Headers.LastAccessed.GetValueOrDefault() - }; + blobType: response.Headers.BlobType.GetValueOrDefault(), + copyCompletedOn: response.Headers.CopyCompletionTime.GetValueOrDefault(), + copyStatusDescription: response.Headers.CopyStatusDescription, + copyId: response.Headers.CopyId, + copyProgress: response.Headers.CopyProgress, + copySource: response.Headers.CopySource == null ? null : new Uri(response.Headers.CopySource), + copyStatus: response.Headers.CopyStatus.GetValueOrDefault(), + isIncrementalCopy: response.Headers.IsIncrementalCopy.GetValueOrDefault(), + destinationSnapshot: response.Headers.DestinationSnapshot, + leaseDuration: response.Headers.LeaseDuration.GetValueOrDefault(), + leaseState: response.Headers.LeaseState.GetValueOrDefault(), + leaseStatus: response.Headers.LeaseStatus.GetValueOrDefault(), + contentLength: response.Headers.ContentLength.GetValueOrDefault(), + contentType: response.Headers.ContentType, + eTag: response.GetRawResponse().Headers.ETag.GetValueOrDefault(), + contentHash: response.Headers.ContentMD5, + contentEncoding: response.Headers.ContentEncoding, + contentDisposition: response.Headers.ContentDisposition, + contentLanguage: response.Headers.ContentLanguage, + cacheControl: response.Headers.CacheControl, + blobSequenceNumber: response.Headers.BlobSequenceNumber.GetValueOrDefault(), + acceptRanges: response.Headers.AcceptRanges, + blobCommittedBlockCount: response.Headers.BlobCommittedBlockCount.GetValueOrDefault(), + isServerEncrypted: response.Headers.IsServerEncrypted.GetValueOrDefault(), + encryptionKeySha256: response.Headers.EncryptionKeySha256, + encryptionScope: response.Headers.EncryptionScope, + accessTier: response.Headers.AccessTier, + accessTierInferred: response.Headers.AccessTierInferred.GetValueOrDefault(), + archiveStatus: response.Headers.ArchiveStatus, + accessTierChangedOn: response.Headers.AccessTierChangeTime.GetValueOrDefault(), + versionId: response.Headers.VersionId, + isLatestVersion: response.Headers.IsCurrentVersion.GetValueOrDefault(), + tagCount: response.Headers.TagCount.GetValueOrDefault(), + expiresOn: response.Headers.ExpiresOn.GetValueOrDefault(), + isSealed: response.Headers.IsSealed.GetValueOrDefault(), + rehydratePriority: response.Headers.RehydratePriority, + lastAccessed: response.Headers.LastAccessed.GetValueOrDefault()); } #endregion diff --git a/sdk/storage/Azure.Storage.Blobs/src/Models/BlobProperties.cs b/sdk/storage/Azure.Storage.Blobs/src/Models/BlobProperties.cs index ed237f077cd7a..36393ece28c59 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/Models/BlobProperties.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/Models/BlobProperties.cs @@ -9,7 +9,7 @@ namespace Azure.Storage.Blobs.Models { /// - /// Properties of a Blob + /// Properties of a Blob. /// public partial class BlobProperties { @@ -17,32 +17,32 @@ public partial class BlobProperties /// Returns the date and time the blob was last modified. Any operation that modifies the blob, /// including an update of the blob's metadata or properties, changes the last-modified time of the blob. /// - public DateTimeOffset LastModified { get; internal set; } + public DateTimeOffset LastModified { get; } /// /// Returns the date and time the blob was created. /// - public DateTimeOffset CreatedOn { get; internal set; } + public DateTimeOffset CreatedOn { get; } /// /// Metadata. /// - public IDictionary Metadata { get; internal set; } + public IDictionary Metadata { get; } /// /// Object Replication Policy Id of the destination blob. /// - public string ObjectReplicationDestinationPolicyId { get; internal set; } + public string ObjectReplicationDestinationPolicyId { get; } /// /// Parsed Object Replication Policy Id, Rule Id(s) and status of the source blob. /// - public IList ObjectReplicationSourceProperties { get; internal set; } + public IList ObjectReplicationSourceProperties { get; } /// /// The blob's type. /// - public BlobType BlobType { get; internal set; } + public BlobType BlobType { get; } /// /// Conclusion time of the last attempted Copy Blob operation where this blob was the destination blob. @@ -51,7 +51,7 @@ public partial class BlobProperties /// or if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, /// Put Blob, or Put Block List. /// - public DateTimeOffset CopyCompletedOn { get; internal set; } + public DateTimeOffset CopyCompletedOn { get; } /// /// Only appears when x-ms-copy-status is failed or pending. Describes the cause of the last fatal or @@ -59,13 +59,13 @@ public partial class BlobProperties /// in a Copy Blob operation, or if this blob has been modified after a concluded Copy Blob operation using /// Set Blob Properties, Put Blob, or Put Block List /// - public string CopyStatusDescription { get; internal set; } + public string CopyStatusDescription { get; } /// /// String identifier for this copy operation. Use with Get Blob Properties to check the status of this copy /// operation, or pass to Abort Copy Blob to abort a pending copy. /// - public string CopyId { get; internal set; } + public string CopyId { get; } /// /// Contains the number of bytes copied and the total bytes in the source in the last attempted Copy Blob @@ -74,7 +74,7 @@ public partial class BlobProperties /// if this blob has been modified after a concluded Copy Blob operation using Set Blob Properties, Put /// Blob, or Put Block List. /// - public string CopyProgress { get; internal set; } + public string CopyProgress { get; } /// /// URL up to 2 KB in length that specifies the source blob or file used in the last attempted Copy Blob @@ -82,67 +82,67 @@ public partial class BlobProperties /// been the destination in a Copy Blob operation, or if this blob has been modified after a concluded /// Copy Blob operation using Set Blob Properties, Put Blob, or Put Block List. /// - public Uri CopySource { get; internal set; } + public Uri CopySource { get; } /// /// State of the copy operation identified by x-ms-copy-id. /// - public CopyStatus CopyStatus { get; internal set; } + public CopyStatus CopyStatus { get; } /// /// Included if the blob is incremental copy blob. /// - public bool IsIncrementalCopy { get; internal set; } + public bool IsIncrementalCopy { get; } /// /// Included if the blob is incremental copy blob or incremental copy snapshot, if x-ms-copy-status is success. /// Snapshot time of the last successful incremental copy snapshot for this blob. /// - public string DestinationSnapshot { get; internal set; } + public string DestinationSnapshot { get; } /// /// When a blob is leased, specifies whether the lease is of infinite or fixed duration. /// - public LeaseDurationType LeaseDuration { get; internal set; } + public LeaseDurationType LeaseDuration { get; } /// /// Lease state of the blob. /// - public LeaseState LeaseState { get; internal set; } + public LeaseState LeaseState { get; } /// /// The current lease status of the blob. /// - public LeaseStatus LeaseStatus { get; internal set; } + public LeaseStatus LeaseStatus { get; } /// /// The number of bytes present in the response body. /// - public long ContentLength { get; internal set; } + public long ContentLength { get; } /// /// The content type specified for the blob. The default content type is 'application/octet-stream'. /// - public string ContentType { get; internal set; } + public string ContentType { get; } /// /// The ETag contains a value that you can use to perform operations conditionally. /// If the request version is 2011-08-18 or newer, the ETag value will be in quotes. /// - public ETag ETag { get; internal set; } + public ETag ETag { get; } /// /// If the blob has an MD5 hash and this operation is to read the full blob, this response header is /// returned so that the client can check for message content integrity. /// #pragma warning disable CA1819 // Properties should not return arrays - public byte[] ContentHash { get; internal set; } + public byte[] ContentHash { get; } #pragma warning restore CA1819 // Properties should not return arrays /// /// This header returns the value that was specified for the Content-Encoding request header. /// - public string ContentEncoding { get; internal set; } + public string ContentEncoding { get; } /// /// This header returns the value that was specified for the 'x-ms-blob-content-disposition' header. @@ -151,51 +151,51 @@ public partial class BlobProperties /// attachment, it indicates that the user-agent should not display the response, but instead show a /// Save As dialog with a filename other than the blob name specified. /// - public string ContentDisposition { get; internal set; } + public string ContentDisposition { get; } /// /// This header returns the value that was specified for the Content-Language request header. /// - public string ContentLanguage { get; internal set; } + public string ContentLanguage { get; } /// /// This header is returned if it was previously specified for the blob. /// - public string CacheControl { get; internal set; } + public string CacheControl { get; } /// /// The current sequence number for a page blob. This header is not returned for block blobs or append blobs. /// - public long BlobSequenceNumber { get; internal set; } + public long BlobSequenceNumber { get; } /// /// Indicates that the service supports requests for partial blob content. /// - public string AcceptRanges { get; internal set; } + public string AcceptRanges { get; } /// /// The number of committed blocks present in the blob. This header is returned only for append blobs. /// - public int BlobCommittedBlockCount { get; internal set; } + public int BlobCommittedBlockCount { get; } /// /// The value of this header is set to true if the blob data and application metadata are completely encrypted /// using the specified algorithm. Otherwise, the value is set to false (when the blob is unencrypted, or if /// only parts of the blob/application metadata are encrypted). /// - public bool IsServerEncrypted { get; internal set; } + public bool IsServerEncrypted { get; } /// /// The SHA-256 hash of the encryption key used to encrypt the metadata. This header is only returned when the /// metadata was encrypted with a customer-provided key. /// - public string EncryptionKeySha256 { get; internal set; } + public string EncryptionKeySha256 { get; } /// /// 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. /// - public string EncryptionScope { get; internal set; } + public string EncryptionScope { get; } /// /// The tier of page blob on a premium storage account or tier of block blob on blob storage LRS accounts. @@ -203,61 +203,61 @@ public partial class BlobProperties /// https://docs.microsoft.com/en-us/azure/virtual-machines/windows/premium-storage#features. For blob /// storage LRS accounts, valid values are Hot/Cool/Archive. /// - public string AccessTier { get; internal set; } + public string AccessTier { get; } /// /// For page blobs on a premium storage account only. If the access tier is not explicitly set on the blob, /// the tier is inferred based on its content length and this header will be returned with true value. /// - public bool AccessTierInferred { get; internal set; } + public bool AccessTierInferred { get; } /// /// 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 header is returned indicating that /// rehydrate is pending and also tells the destination tier. /// - public string ArchiveStatus { get; internal set; } + public string ArchiveStatus { get; } /// /// The time the tier was changed on the object. This is only returned if the tier on the block blob was ever set. /// - public DateTimeOffset AccessTierChangedOn { get; internal set; } + public DateTimeOffset AccessTierChangedOn { get; } /// /// A DateTime value returned by the service that uniquely identifies the blob. The value of this header /// indicates the blob version, and may be used in subsequent requests to access this version of the blob. /// - public string VersionId { get; internal set; } + public string VersionId { get; } /// /// The value of this header indicates whether version of this blob is a current version, see also x-ms-version-id header. /// - public bool IsLatestVersion { get; internal set; } + public bool IsLatestVersion { get; } /// /// The number of tags associated with the blob. /// - public long TagCount { get; internal set; } + public long TagCount { get; } /// /// The time this blob will expire. /// - public DateTimeOffset ExpiresOn { get; internal set; } + public DateTimeOffset ExpiresOn { get; } /// /// If this blob has been sealed. /// - public bool IsSealed { get; internal set; } + public bool IsSealed { get; } /// /// If this blob is in rehydrate pending state, this indicates the rehydrate priority. /// - public string RehydratePriority { get; internal set; } + public string RehydratePriority { get; } /// /// Returns the date and time the blob was read or written to. /// - public DateTimeOffset LastAccessed { get; internal set; } + public DateTimeOffset LastAccessed { get; } /// /// Constructor. @@ -267,5 +267,96 @@ public BlobProperties() Metadata = new Dictionary(System.StringComparer.OrdinalIgnoreCase); ObjectReplicationSourceProperties = new List(); } + + /// + /// Internal Constructor. + /// + internal BlobProperties( + DateTimeOffset lastModified, + DateTimeOffset createdOn, + IDictionary metadata, + string objectReplicationDestinationPolicyId, + IList objectReplicationSourceProperties, + BlobType blobType, + DateTimeOffset copyCompletedOn, + string copyStatusDescription, + string copyId, + string copyProgress, + Uri copySource, + CopyStatus copyStatus, + bool isIncrementalCopy, + string destinationSnapshot, + LeaseDurationType leaseDuration, + LeaseState leaseState, + LeaseStatus leaseStatus, + long contentLength, + string contentType, + ETag eTag, + byte[] contentHash, + string contentEncoding, + string contentDisposition, + string contentLanguage, + string cacheControl, + long blobSequenceNumber, + string acceptRanges, + int blobCommittedBlockCount, + bool isServerEncrypted, + string encryptionKeySha256, + string encryptionScope, + string accessTier, + bool accessTierInferred, + string archiveStatus, + DateTimeOffset accessTierChangedOn, + string versionId, + bool isLatestVersion, + long tagCount, + DateTimeOffset expiresOn, + bool isSealed, + string rehydratePriority, + DateTimeOffset lastAccessed) + { + LastModified = lastModified; + LeaseStatus = leaseStatus; + ContentLength = contentLength; + ContentType = contentType; + ETag = eTag; + LeaseState = leaseState; + ContentEncoding = contentEncoding; + ContentDisposition = contentDisposition; + ContentLanguage = contentLanguage; + CacheControl = cacheControl; + BlobSequenceNumber = blobSequenceNumber; + LeaseDuration = leaseDuration; + AcceptRanges = acceptRanges; + DestinationSnapshot = destinationSnapshot; + BlobCommittedBlockCount = blobCommittedBlockCount; + IsIncrementalCopy = isIncrementalCopy; + IsServerEncrypted = isServerEncrypted; + CopyStatus = copyStatus; + EncryptionKeySha256 = encryptionKeySha256; + CopySource = copySource; + EncryptionScope = encryptionScope; + CopyProgress = copyProgress; + AccessTier = accessTier; + CopyId = copyId; + AccessTierInferred = accessTierInferred; + CopyStatusDescription = copyStatusDescription; + ArchiveStatus = archiveStatus; + CopyCompletedOn = copyCompletedOn; + AccessTierChangedOn = accessTierChangedOn; + BlobType = blobType; + VersionId = versionId; + ObjectReplicationSourceProperties = objectReplicationSourceProperties; + IsLatestVersion = isLatestVersion; + ObjectReplicationDestinationPolicyId = objectReplicationDestinationPolicyId; + TagCount = tagCount; + Metadata = metadata; + ExpiresOn = expiresOn; + CreatedOn = createdOn; + IsSealed = isSealed; + RehydratePriority = rehydratePriority; + ContentHash = contentHash; + LastAccessed = lastAccessed; + } } } diff --git a/sdk/storage/Azure.Storage.Blobs/src/Models/BlobsModelFactory.cs b/sdk/storage/Azure.Storage.Blobs/src/Models/BlobsModelFactory.cs index 87bfae8522624..cb85e6df0e890 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/Models/BlobsModelFactory.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/Models/BlobsModelFactory.cs @@ -185,53 +185,50 @@ public static BlobProperties BlobProperties( string rehydratePriority = default, byte[] contentHash = default, DateTimeOffset lastAccessed = default) - { - return new BlobProperties() - { - LastModified = lastModified, - LeaseStatus = leaseStatus, - ContentLength = contentLength, - ContentType = contentType, - ETag = eTag, - LeaseState = leaseState, - ContentEncoding = contentEncoding, - ContentDisposition = contentDisposition, - ContentLanguage = contentLanguage, - CacheControl = cacheControl, - BlobSequenceNumber = blobSequenceNumber, - LeaseDuration = leaseDuration, - AcceptRanges = acceptRanges, - DestinationSnapshot = destinationSnapshot, - BlobCommittedBlockCount = blobCommittedBlockCount, - IsIncrementalCopy = isIncrementalCopy, - IsServerEncrypted = isServerEncrypted, - CopyStatus = copyStatus, - EncryptionKeySha256 = encryptionKeySha256, - CopySource = copySource, - EncryptionScope = encryptionScope, - CopyProgress = copyProgress, - AccessTier = accessTier, - CopyId = copyId, - AccessTierInferred = accessTierInferred, - CopyStatusDescription = copyStatusDescription, - ArchiveStatus = archiveStatus, - CopyCompletedOn = copyCompletedOn, - AccessTierChangedOn = accessTierChangedOn, - BlobType = blobType, - VersionId = versionId, - ObjectReplicationSourceProperties = objectReplicationSourceProperties, - IsLatestVersion = isLatestVersion, - ObjectReplicationDestinationPolicyId = objectReplicationDestinationPolicyId, - TagCount = tagCount, - Metadata = metadata, - ExpiresOn = expiresOn, - CreatedOn = createdOn, - IsSealed = isSealed, - RehydratePriority = rehydratePriority, - ContentHash = contentHash, - LastAccessed = lastAccessed - }; - } + => new BlobProperties( + lastModified: lastModified, + createdOn: createdOn, + metadata: metadata, + objectReplicationDestinationPolicyId: objectReplicationDestinationPolicyId, + objectReplicationSourceProperties: objectReplicationSourceProperties, + blobType: blobType, + copyCompletedOn: copyCompletedOn, + copyStatusDescription: copyStatusDescription, + copyId: copyId, + copyProgress: copyProgress, + copySource: copySource, + copyStatus: copyStatus, + isIncrementalCopy: isIncrementalCopy, + destinationSnapshot: destinationSnapshot, + leaseDuration: leaseDuration, + leaseState: leaseState, + leaseStatus: leaseStatus, + contentLength: contentLength, + contentType: contentType, + eTag: eTag, + contentHash: contentHash, + contentEncoding: contentEncoding, + contentDisposition: contentDisposition, + contentLanguage: contentLanguage, + cacheControl: cacheControl, + blobSequenceNumber: blobSequenceNumber, + acceptRanges: acceptRanges, + blobCommittedBlockCount: blobCommittedBlockCount, + isServerEncrypted: isServerEncrypted, + encryptionKeySha256: encryptionKeySha256, + encryptionScope: encryptionScope, + accessTier: accessTier, + accessTierInferred: accessTierInferred, + archiveStatus: archiveStatus, + accessTierChangedOn: accessTierChangedOn, + versionId: versionId, + isLatestVersion: isLatestVersion, + tagCount: tagCount, + expiresOn: expiresOn, + isSealed: isSealed, + rehydratePriority: rehydratePriority, + lastAccessed: lastAccessed + ); /// /// Creates a new BlobProperties instance for mocking. @@ -279,52 +276,50 @@ public static BlobProperties BlobProperties( bool isSealed, string rehydratePriority, byte[] contentHash) - { - return new BlobProperties() - { - LastModified = lastModified, - LeaseStatus = leaseStatus, - ContentLength = contentLength, - ContentType = contentType, - ETag = eTag, - LeaseState = leaseState, - ContentEncoding = contentEncoding, - ContentDisposition = contentDisposition, - ContentLanguage = contentLanguage, - CacheControl = cacheControl, - BlobSequenceNumber = blobSequenceNumber, - LeaseDuration = leaseDuration, - AcceptRanges = acceptRanges, - DestinationSnapshot = destinationSnapshot, - BlobCommittedBlockCount = blobCommittedBlockCount, - IsIncrementalCopy = isIncrementalCopy, - IsServerEncrypted = isServerEncrypted, - CopyStatus = copyStatus, - EncryptionKeySha256 = encryptionKeySha256, - CopySource = copySource, - EncryptionScope = encryptionScope, - CopyProgress = copyProgress, - AccessTier = accessTier, - CopyId = copyId, - AccessTierInferred = accessTierInferred, - CopyStatusDescription = copyStatusDescription, - ArchiveStatus = archiveStatus, - CopyCompletedOn = copyCompletedOn, - AccessTierChangedOn = accessTierChangedOn, - BlobType = blobType, - VersionId = versionId, - ObjectReplicationSourceProperties = objectReplicationSourceProperties, - IsLatestVersion = isLatestVersion, - ObjectReplicationDestinationPolicyId = objectReplicationDestinationPolicyId, - TagCount = tagCount, - Metadata = metadata, - ExpiresOn = expiresOn, - CreatedOn = createdOn, - IsSealed = isSealed, - RehydratePriority = rehydratePriority, - ContentHash = contentHash, - }; - } + => new BlobProperties( + lastModified: lastModified, + createdOn: createdOn, + metadata: metadata, + objectReplicationDestinationPolicyId: objectReplicationDestinationPolicyId, + objectReplicationSourceProperties: objectReplicationSourceProperties, + blobType: blobType, + copyCompletedOn: copyCompletedOn, + copyStatusDescription: copyStatusDescription, + copyId: copyId, + copyProgress: copyProgress, + copySource: copySource, + copyStatus: copyStatus, + isIncrementalCopy: isIncrementalCopy, + destinationSnapshot: destinationSnapshot, + leaseDuration: leaseDuration, + leaseState: leaseState, + leaseStatus: leaseStatus, + contentLength: contentLength, + contentType: contentType, + eTag: eTag, + contentHash: contentHash, + contentEncoding: contentEncoding, + contentDisposition: contentDisposition, + contentLanguage: contentLanguage, + cacheControl: cacheControl, + blobSequenceNumber: blobSequenceNumber, + acceptRanges: acceptRanges, + blobCommittedBlockCount: blobCommittedBlockCount, + isServerEncrypted: isServerEncrypted, + encryptionKeySha256: encryptionKeySha256, + encryptionScope: encryptionScope, + accessTier: accessTier, + accessTierInferred: accessTierInferred, + archiveStatus: archiveStatus, + accessTierChangedOn: accessTierChangedOn, + versionId: versionId, + isLatestVersion: isLatestVersion, + tagCount: tagCount, + expiresOn: expiresOn, + isSealed: isSealed, + rehydratePriority: rehydratePriority, + lastAccessed: default // Not provided, see non-deprecated model + ); /// /// Creates a new BlobProperties instance for mocking. @@ -364,44 +359,50 @@ public static BlobProperties BlobProperties( DateTimeOffset createdOn, DateTimeOffset accessTierChangedOn, string contentType) - { - return new BlobProperties() - { - LastModified = lastModified, - LeaseState = leaseState, - LeaseStatus = leaseStatus, - ContentLength = contentLength, - LeaseDuration = leaseDuration, - ETag = eTag, - ContentHash = contentHash, - ContentEncoding = contentEncoding, - ContentDisposition = contentDisposition, - ContentLanguage = contentLanguage, - DestinationSnapshot = destinationSnapshot, - CacheControl = cacheControl, - IsIncrementalCopy = isIncrementalCopy, - BlobSequenceNumber = blobSequenceNumber, - CopyStatus = copyStatus, - AcceptRanges = acceptRanges, - CopySource = copySource, - BlobCommittedBlockCount = blobCommittedBlockCount, - CopyProgress = copyProgress, - IsServerEncrypted = isServerEncrypted, - CopyId = copyId, - EncryptionKeySha256 = encryptionKeySha256, - CopyStatusDescription = copyStatusDescription, - EncryptionScope = encryptionScope, - CopyCompletedOn = copyCompletedOn, - AccessTier = accessTier, - BlobType = blobType, - AccessTierInferred = accessTierInferred, - Metadata = metadata, - ArchiveStatus = archiveStatus, - CreatedOn = createdOn, - AccessTierChangedOn = accessTierChangedOn, - ContentType = contentType, - }; - } + => new BlobProperties( + lastModified: lastModified, + createdOn: createdOn, + metadata: metadata, + objectReplicationDestinationPolicyId: default, // Not provided, see non-deprecated model + objectReplicationSourceProperties: default, // Not provided, see non-deprecated model + blobType: blobType, + copyCompletedOn: copyCompletedOn, + copyStatusDescription: copyStatusDescription, + copyId: copyId, + copyProgress: copyProgress, + copySource: copySource, + copyStatus: copyStatus, + isIncrementalCopy: isIncrementalCopy, + destinationSnapshot: destinationSnapshot, + leaseDuration: leaseDuration, + leaseState: leaseState, + leaseStatus: leaseStatus, + contentLength: contentLength, + contentType: contentType, + eTag: eTag, + contentHash: contentHash, + contentEncoding: contentEncoding, + contentDisposition: contentDisposition, + contentLanguage: contentLanguage, + cacheControl: cacheControl, + blobSequenceNumber: blobSequenceNumber, + acceptRanges: acceptRanges, + blobCommittedBlockCount: blobCommittedBlockCount, + isServerEncrypted: isServerEncrypted, + encryptionKeySha256: encryptionKeySha256, + encryptionScope: encryptionScope, + accessTier: accessTier, + accessTierInferred: accessTierInferred, + archiveStatus: archiveStatus, + accessTierChangedOn: accessTierChangedOn, + versionId: default, // Not provided, see non-deprecated model + isLatestVersion: default, // Not provided, see non-deprecated model + tagCount: default, // Not provided, see non-deprecated model + expiresOn: default, // Not provided, see non-deprecated model + isSealed: default, // Not provided, see non-deprecated model + rehydratePriority: default, // Not provided, see non-deprecated model + lastAccessed: default // Not provided, see non-deprecated model + ); /// /// Creates a new BlobProperties instance for mocking. @@ -440,41 +441,50 @@ public static BlobProperties BlobProperties( DateTimeOffset createdOn, DateTimeOffset accessTierChangedOn, string contentType) - => new BlobProperties() - { - LastModified = lastModified, - LeaseState = leaseState, - LeaseStatus = leaseStatus, - ContentLength = contentLength, - LeaseDuration = leaseDuration, - ETag = eTag, - ContentHash = contentHash, - ContentEncoding = contentEncoding, - ContentDisposition = contentDisposition, - ContentLanguage = contentLanguage, - DestinationSnapshot = destinationSnapshot, - CacheControl = cacheControl, - IsIncrementalCopy = isIncrementalCopy, - BlobSequenceNumber = blobSequenceNumber, - CopyStatus = copyStatus, - AcceptRanges = acceptRanges, - CopySource = copySource, - BlobCommittedBlockCount = blobCommittedBlockCount, - CopyProgress = copyProgress, - IsServerEncrypted = isServerEncrypted, - CopyId = copyId, - EncryptionKeySha256 = encryptionKeySha256, - CopyStatusDescription = copyStatusDescription, - CopyCompletedOn = copyCompletedOn, - AccessTier = accessTier, - BlobType = blobType, - AccessTierInferred = accessTierInferred, - Metadata = metadata, - ArchiveStatus = archiveStatus, - CreatedOn = createdOn, - AccessTierChangedOn = accessTierChangedOn, - ContentType = contentType, - }; + => new BlobProperties( + lastModified: lastModified, + createdOn: createdOn, + metadata: metadata, + objectReplicationDestinationPolicyId: default, // Not provided, see non-deprecated model + objectReplicationSourceProperties: default, // Not provided, see non-deprecated model + blobType: blobType, + copyCompletedOn: copyCompletedOn, + copyStatusDescription: copyStatusDescription, + copyId: copyId, + copyProgress: copyProgress, + copySource: copySource, + copyStatus: copyStatus, + isIncrementalCopy: isIncrementalCopy, + destinationSnapshot: destinationSnapshot, + leaseDuration: leaseDuration, + leaseState: leaseState, + leaseStatus: leaseStatus, + contentLength: contentLength, + contentType: contentType, + eTag: eTag, + contentHash: contentHash, + contentEncoding: contentEncoding, + contentDisposition: contentDisposition, + contentLanguage: contentLanguage, + cacheControl: cacheControl, + blobSequenceNumber: blobSequenceNumber, + acceptRanges: acceptRanges, + blobCommittedBlockCount: blobCommittedBlockCount, + isServerEncrypted: isServerEncrypted, + encryptionKeySha256: encryptionKeySha256, + encryptionScope: default, // Not provided, see non-deprecated model + accessTier: accessTier, + accessTierInferred: accessTierInferred, + archiveStatus: archiveStatus, + accessTierChangedOn: accessTierChangedOn, + versionId: default, // Not provided, see non-deprecated model + isLatestVersion: default, // Not provided, see non-deprecated model + tagCount: default, // Not provided, see non-deprecated model + expiresOn: default, // Not provided, see non-deprecated model + isSealed: default, // Not provided, see non-deprecated model + rehydratePriority: default, // Not provided, see non-deprecated model + lastAccessed: default // Not provided, see non-deprecated model + ); #endregion #region BlobItemProperties diff --git a/sdk/storage/Azure.Storage.Blobs/tests/BlobBaseClientTests.cs b/sdk/storage/Azure.Storage.Blobs/tests/BlobBaseClientTests.cs index 989f585a9c422..d3fe9ec816308 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/BlobBaseClientTests.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/BlobBaseClientTests.cs @@ -4308,11 +4308,14 @@ public async Task GetPropertiesAsync_Version() BlobBaseClient versionBlob = blob.WithVersion(createResponse.Value.VersionId); // Act - Response response = await versionBlob.GetPropertiesAsync(); + Response oldVersionResponse = await versionBlob.GetPropertiesAsync(); + Response latestVersionResponse = await blob.GetPropertiesAsync(); // Assert - Assert.IsNotNull(response.Value.VersionId); - Assert.IsFalse(response.Value.IsLatestVersion); + Assert.IsNotNull(oldVersionResponse.Value.VersionId); + Assert.IsFalse(oldVersionResponse.Value.IsLatestVersion); + Assert.IsNotNull(oldVersionResponse.Value.VersionId); + Assert.IsTrue(latestVersionResponse.Value.IsLatestVersion); } private void AssertSasUserDelegationKey(Uri uri, UserDelegationKey key) diff --git a/sdk/storage/Azure.Storage.Blobs/tests/PartitionedDownloaderTests.cs b/sdk/storage/Azure.Storage.Blobs/tests/PartitionedDownloaderTests.cs index 8b375787ed593..2e93e01d556b8 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/PartitionedDownloaderTests.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/PartitionedDownloaderTests.cs @@ -77,11 +77,6 @@ public async Task DownloadsInBlocksWhenOverTheLimit() MockDataSource dataSource = new MockDataSource(100); Mock blockClient = new Mock(MockBehavior.Strict, new Uri("http://mock"), new BlobClientOptions()); blockClient.SetupGet(c => c.ClientConfiguration).CallBase(); - BlobProperties smallLengthProperties = new BlobProperties() - { - ContentLength = 100 - }; - SetupDownload(blockClient, dataSource); PartitionedDownloader downloader = new PartitionedDownloader( @@ -106,10 +101,6 @@ public async Task RespectsInitialTransferSizeBeforeDownloadingInBlocks() MockDataSource dataSource = new MockDataSource(100); Mock blockClient = new Mock(MockBehavior.Strict, new Uri("http://mock"), new BlobClientOptions()); blockClient.SetupGet(c => c.ClientConfiguration).CallBase(); - BlobProperties smallLengthProperties = new BlobProperties() - { - ContentLength = 100 - }; SetupDownload(blockClient, dataSource); @@ -135,11 +126,6 @@ public async Task IncludesEtagInConditions() MockDataSource dataSource = new MockDataSource(100); Mock blockClient = new Mock(MockBehavior.Strict, new Uri("http://mock"), new BlobClientOptions()); blockClient.SetupGet(c => c.ClientConfiguration).CallBase(); - BlobProperties properties = new BlobProperties() - { - ContentLength = 100, - ETag = s_etag - }; SetupDownload(blockClient, dataSource); @@ -183,10 +169,6 @@ public void SurfacesDownloadExceptions() MemoryStream stream = new MemoryStream(); Mock blockClient = new Mock(MockBehavior.Strict, new Uri("http://mock"), new BlobClientOptions()); blockClient.SetupGet(c => c.ClientConfiguration).CallBase(); - BlobProperties smallLengthProperties = new BlobProperties() - { - ContentLength = 100 - }; if (_async) { diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/GetPropertiesAsync_Version.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/GetPropertiesAsync_Version.json index ffc45a177d828..6a955b8a2a632 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/GetPropertiesAsync_Version.json +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/GetPropertiesAsync_Version.json @@ -1,128 +1,128 @@ { "Entries": [ { - "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-952d1108-0b06-34ed-543c-f015baa58931?restype=container", + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-952d1108-0b06-34ed-543c-f015baa58931?restype=container", "RequestMethod": "PUT", "RequestHeaders": { "Accept": "application/xml", "Authorization": "Sanitized", - "traceparent": "00-8d01cf48652b18499a67649d9d017ae6-cde20dba0dd9424a-00", + "traceparent": "00-ce2ca32325863e4881c7106d930b4fa0-bac9b30775d6584b-00", "User-Agent": [ - "azsdk-net-Storage.Blobs/12.9.0-alpha.20210217.1", - "(.NET 5.0.3; Microsoft Windows 10.0.19042)" + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" ], "x-ms-blob-public-access": "container", "x-ms-client-request-id": "95410aed-d600-400c-98a2-1351c45ef1af", - "x-ms-date": "Wed, 17 Feb 2021 18:47:06 GMT", + "x-ms-date": "Thu, 03 Jun 2021 16:28:48 GMT", "x-ms-return-client-request-id": "true", - "x-ms-version": "2020-08-04" + "x-ms-version": "2020-08-04" }, "RequestBody": null, "StatusCode": 201, "ResponseHeaders": { "Content-Length": "0", - "Date": "Wed, 17 Feb 2021 18:47:06 GMT", - "ETag": "\u00220x8D8D3746D09052F\u0022", - "Last-Modified": "Wed, 17 Feb 2021 18:47:07 GMT", + "Date": "Thu, 03 Jun 2021 16:28:48 GMT", + "ETag": "\u00220x8D926ACAA9D3101\u0022", + "Last-Modified": "Thu, 03 Jun 2021 16:28:48 GMT", "Server": [ "Windows-Azure-Blob/1.0", "Microsoft-HTTPAPI/2.0" ], "x-ms-client-request-id": "95410aed-d600-400c-98a2-1351c45ef1af", - "x-ms-request-id": "42c33b18-201e-000c-275d-054dca000000", - "x-ms-version": "2020-08-04" + "x-ms-request-id": "075e6759-801e-0018-3895-5892c7000000", + "x-ms-version": "2020-08-04" }, "ResponseBody": [] }, { - "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-952d1108-0b06-34ed-543c-f015baa58931/test-blob-d4881d87-2f43-15e6-2ea1-14522effea79", + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-952d1108-0b06-34ed-543c-f015baa58931/test-blob-d4881d87-2f43-15e6-2ea1-14522effea79", "RequestMethod": "PUT", "RequestHeaders": { "Accept": "application/xml", "Authorization": "Sanitized", - "traceparent": "00-fdcaaf544a57c249b776ba1929c79dfd-5f57bc9d1355ac4b-00", + "traceparent": "00-86348fc3eb2a4c41a109d84c50a63184-dc680b03c4714d41-00", "User-Agent": [ - "azsdk-net-Storage.Blobs/12.9.0-alpha.20210217.1", - "(.NET 5.0.3; Microsoft Windows 10.0.19042)" + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" ], "x-ms-blob-type": "AppendBlob", "x-ms-client-request-id": "2c672dc2-2852-bdc6-232c-675ec1b91199", - "x-ms-date": "Wed, 17 Feb 2021 18:47:07 GMT", + "x-ms-date": "Thu, 03 Jun 2021 16:28:48 GMT", "x-ms-return-client-request-id": "true", - "x-ms-version": "2020-08-04" + "x-ms-version": "2020-08-04" }, "RequestBody": null, "StatusCode": 201, "ResponseHeaders": { "Content-Length": "0", - "Date": "Wed, 17 Feb 2021 18:47:07 GMT", - "ETag": "\u00220x8D8D3746D13AD81\u0022", - "Last-Modified": "Wed, 17 Feb 2021 18:47:07 GMT", + "Date": "Thu, 03 Jun 2021 16:28:48 GMT", + "ETag": "\u00220x8D926ACAAACA72D\u0022", + "Last-Modified": "Thu, 03 Jun 2021 16:28:48 GMT", "Server": [ "Windows-Azure-Blob/1.0", "Microsoft-HTTPAPI/2.0" ], "x-ms-client-request-id": "2c672dc2-2852-bdc6-232c-675ec1b91199", - "x-ms-request-id": "42c33b30-201e-000c-375d-054dca000000", + "x-ms-request-id": "075e676e-801e-0018-4a95-5892c7000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2021-02-17T18:47:07.2608401Z" + "x-ms-version": "2020-08-04", + "x-ms-version-id": "2021-06-03T16:28:48.9307949Z" }, "ResponseBody": [] }, { - "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-952d1108-0b06-34ed-543c-f015baa58931/test-blob-d4881d87-2f43-15e6-2ea1-14522effea79?comp=metadata", + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-952d1108-0b06-34ed-543c-f015baa58931/test-blob-d4881d87-2f43-15e6-2ea1-14522effea79?comp=metadata", "RequestMethod": "PUT", "RequestHeaders": { "Accept": "application/xml", "Authorization": "Sanitized", - "traceparent": "00-bff8a38b0eaf054fb615d1fc5dcc12e6-6448f5147d748f4d-00", + "traceparent": "00-bea535cdb80a1b40ab6399cbaafbe26a-3aecd8ec9a166b4c-00", "User-Agent": [ - "azsdk-net-Storage.Blobs/12.9.0-alpha.20210217.1", - "(.NET 5.0.3; Microsoft Windows 10.0.19042)" + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" ], "x-ms-client-request-id": "0190f2db-be97-1526-2069-8d388cd31653", - "x-ms-date": "Wed, 17 Feb 2021 18:47:07 GMT", + "x-ms-date": "Thu, 03 Jun 2021 16:28:48 GMT", "x-ms-meta-Capital": "letter", "x-ms-meta-foo": "bar", "x-ms-meta-meta": "data", "x-ms-meta-UPPER": "case", "x-ms-return-client-request-id": "true", - "x-ms-version": "2020-08-04" + "x-ms-version": "2020-08-04" }, "RequestBody": null, "StatusCode": 200, "ResponseHeaders": { "Content-Length": "0", - "Date": "Wed, 17 Feb 2021 18:47:07 GMT", - "ETag": "\u00220x8D8D3746D1CFE01\u0022", - "Last-Modified": "Wed, 17 Feb 2021 18:47:07 GMT", + "Date": "Thu, 03 Jun 2021 16:28:48 GMT", + "ETag": "\u00220x8D926ACAAB8DA6A\u0022", + "Last-Modified": "Thu, 03 Jun 2021 16:28:49 GMT", "Server": [ "Windows-Azure-Blob/1.0", "Microsoft-HTTPAPI/2.0" ], "x-ms-client-request-id": "0190f2db-be97-1526-2069-8d388cd31653", - "x-ms-request-id": "42c33b46-201e-000c-4c5d-054dca000000", + "x-ms-request-id": "075e678b-801e-0018-6695-5892c7000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2021-02-17T18:47:07.3228838Z" + "x-ms-version": "2020-08-04", + "x-ms-version-id": "2021-06-03T16:28:49.0127490Z" }, "ResponseBody": [] }, { - "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-952d1108-0b06-34ed-543c-f015baa58931/test-blob-d4881d87-2f43-15e6-2ea1-14522effea79?versionid=2021-02-17T18:47:07.2608401Z", + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-952d1108-0b06-34ed-543c-f015baa58931/test-blob-d4881d87-2f43-15e6-2ea1-14522effea79?versionid=2021-06-03T16:28:48.9307949Z", "RequestMethod": "HEAD", "RequestHeaders": { "Accept": "application/xml", "Authorization": "Sanitized", "User-Agent": [ - "azsdk-net-Storage.Blobs/12.9.0-alpha.20210217.1", - "(.NET 5.0.3; Microsoft Windows 10.0.19042)" + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" ], "x-ms-client-request-id": "cf82caf6-0f28-f801-73fd-bcccb3120617", - "x-ms-date": "Wed, 17 Feb 2021 18:47:07 GMT", + "x-ms-date": "Thu, 03 Jun 2021 16:28:49 GMT", "x-ms-return-client-request-id": "true", - "x-ms-version": "2020-08-04" + "x-ms-version": "2020-08-04" }, "RequestBody": null, "StatusCode": 200, @@ -130,9 +130,9 @@ "Accept-Ranges": "bytes", "Content-Length": "0", "Content-Type": "application/octet-stream", - "Date": "Wed, 17 Feb 2021 18:47:07 GMT", - "ETag": "\u00220x8D8D3746D13AD81\u0022", - "Last-Modified": "Wed, 17 Feb 2021 18:47:07 GMT", + "Date": "Thu, 03 Jun 2021 16:28:48 GMT", + "ETag": "\u00220x8D926ACAAACA72D\u0022", + "Last-Modified": "Thu, 03 Jun 2021 16:28:48 GMT", "Server": [ "Windows-Azure-Blob/1.0", "Microsoft-HTTPAPI/2.0" @@ -140,48 +140,95 @@ "x-ms-blob-committed-block-count": "0", "x-ms-blob-type": "AppendBlob", "x-ms-client-request-id": "cf82caf6-0f28-f801-73fd-bcccb3120617", - "x-ms-creation-time": "Wed, 17 Feb 2021 18:47:07 GMT", - "x-ms-request-id": "42c33b53-201e-000c-585d-054dca000000", + "x-ms-creation-time": "Thu, 03 Jun 2021 16:28:48 GMT", + "x-ms-request-id": "075e67b9-801e-0018-0e95-5892c7000000", "x-ms-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2021-02-17T18:47:07.2608401Z" + "x-ms-version": "2020-08-04", + "x-ms-version-id": "2021-06-03T16:28:48.9307949Z" }, "ResponseBody": [] }, { - "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-952d1108-0b06-34ed-543c-f015baa58931?restype=container", - "RequestMethod": "DELETE", + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-952d1108-0b06-34ed-543c-f015baa58931/test-blob-d4881d87-2f43-15e6-2ea1-14522effea79", + "RequestMethod": "HEAD", "RequestHeaders": { "Accept": "application/xml", "Authorization": "Sanitized", - "traceparent": "00-e2467c5fbddac94cba35c4c42cd20381-56665d403c5d7f4e-00", + "traceparent": "00-f6deca69c20957408f049d37d6558c1e-39068cd2a1cfb74c-00", "User-Agent": [ - "azsdk-net-Storage.Blobs/12.9.0-alpha.20210217.1", - "(.NET 5.0.3; Microsoft Windows 10.0.19042)" + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" ], "x-ms-client-request-id": "c24241c7-4750-8b2a-795f-d1812d1fcccf", - "x-ms-date": "Wed, 17 Feb 2021 18:47:07 GMT", + "x-ms-date": "Thu, 03 Jun 2021 16:28:49 GMT", "x-ms-return-client-request-id": "true", - "x-ms-version": "2020-08-04" + "x-ms-version": "2020-08-04" }, "RequestBody": null, - "StatusCode": 202, + "StatusCode": 200, "ResponseHeaders": { + "Accept-Ranges": "bytes", "Content-Length": "0", - "Date": "Wed, 17 Feb 2021 18:47:07 GMT", + "Content-Type": "application/octet-stream", + "Date": "Thu, 03 Jun 2021 16:28:48 GMT", + "ETag": "\u00220x8D926ACAAB8DA6A\u0022", + "Last-Modified": "Thu, 03 Jun 2021 16:28:49 GMT", "Server": [ "Windows-Azure-Blob/1.0", "Microsoft-HTTPAPI/2.0" ], + "x-ms-blob-committed-block-count": "0", + "x-ms-blob-type": "AppendBlob", "x-ms-client-request-id": "c24241c7-4750-8b2a-795f-d1812d1fcccf", - "x-ms-request-id": "42c33b5e-201e-000c-615d-054dca000000", - "x-ms-version": "2020-08-04" + "x-ms-creation-time": "Thu, 03 Jun 2021 16:28:48 GMT", + "x-ms-is-current-version": "true", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-meta-Capital": "letter", + "x-ms-meta-foo": "bar", + "x-ms-meta-meta": "data", + "x-ms-meta-UPPER": "case", + "x-ms-request-id": "075e67d2-801e-0018-2595-5892c7000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2020-08-04", + "x-ms-version-id": "2021-06-03T16:28:49.0127490Z" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-952d1108-0b06-34ed-543c-f015baa58931?restype=container", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/xml", + "Authorization": "Sanitized", + "traceparent": "00-5ce09442e62632498a59e3ed2ab0ed69-58a9bc26eee48442-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" + ], + "x-ms-client-request-id": "7204ca47-43d0-52c6-4b70-27201f9dc4e6", + "x-ms-date": "Thu, 03 Jun 2021 16:28:49 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2020-08-04" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Content-Length": "0", + "Date": "Thu, 03 Jun 2021 16:28:48 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-client-request-id": "7204ca47-43d0-52c6-4b70-27201f9dc4e6", + "x-ms-request-id": "075e67de-801e-0018-3195-5892c7000000", + "x-ms-version": "2020-08-04" }, "ResponseBody": [] } ], "Variables": { "RandomSeed": "599203095", - "Storage_TestConfigDefault": "ProductionTenant\nseanmcccanary3\nU2FuaXRpemVk\nhttps://seanmcccanary3.blob.core.windows.net\nhttps://seanmcccanary3.file.core.windows.net\nhttps://seanmcccanary3.queue.core.windows.net\nhttps://seanmcccanary3.table.core.windows.net\n\n\n\n\nhttps://seanmcccanary3-secondary.blob.core.windows.net\nhttps://seanmcccanary3-secondary.file.core.windows.net\nhttps://seanmcccanary3-secondary.queue.core.windows.net\nhttps://seanmcccanary3-secondary.table.core.windows.net\n\nSanitized\n\n\nCloud\nBlobEndpoint=https://seanmcccanary3.blob.core.windows.net/;QueueEndpoint=https://seanmcccanary3.queue.core.windows.net/;FileEndpoint=https://seanmcccanary3.file.core.windows.net/;BlobSecondaryEndpoint=https://seanmcccanary3-secondary.blob.core.windows.net/;QueueSecondaryEndpoint=https://seanmcccanary3-secondary.queue.core.windows.net/;FileSecondaryEndpoint=https://seanmcccanary3-secondary.file.core.windows.net/;AccountName=seanmcccanary3;AccountKey=Kg==;\nseanscope1" + "Storage_TestConfigDefault": "ProductionTenant\namandadev3\nU2FuaXRpemVk\nhttps://amandadev3.blob.core.windows.net\nhttps://amandadev3.file.core.windows.net\nhttps://amandadev3.queue.core.windows.net\nhttps://amandadev3.table.core.windows.net\n\n\n\n\nhttps://amandadev3-secondary.blob.core.windows.net\nhttps://amandadev3-secondary.file.core.windows.net\nhttps://amandadev3-secondary.queue.core.windows.net\nhttps://amandadev3-secondary.table.core.windows.net\n\nSanitized\n\n\nCloud\nBlobEndpoint=https://amandadev3.blob.core.windows.net/;QueueEndpoint=https://amandadev3.queue.core.windows.net/;FileEndpoint=https://amandadev3.file.core.windows.net/;BlobSecondaryEndpoint=https://amandadev3-secondary.blob.core.windows.net/;QueueSecondaryEndpoint=https://amandadev3-secondary.queue.core.windows.net/;FileSecondaryEndpoint=https://amandadev3-secondary.file.core.windows.net/;AccountName=amandadev3;AccountKey=Kg==;\ntestscope2" } } \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/GetPropertiesAsync_VersionAsync.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/GetPropertiesAsync_VersionAsync.json index ecbb81ba07b38..4e240013f30ff 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/GetPropertiesAsync_VersionAsync.json +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/BlobBaseClientTests/GetPropertiesAsync_VersionAsync.json @@ -1,128 +1,128 @@ { "Entries": [ { - "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-a0cd24c1-9110-ab02-3f4e-bcbc172eb6b4?restype=container", + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-a0cd24c1-9110-ab02-3f4e-bcbc172eb6b4?restype=container", "RequestMethod": "PUT", "RequestHeaders": { "Accept": "application/xml", "Authorization": "Sanitized", - "traceparent": "00-147b30397f6d2c4d94527b569e1ffe4e-a1d8d83afa150b4b-00", + "traceparent": "00-daafd717c7d9044480e5b5e7f195d13e-50b5d887c1b20f4f-00", "User-Agent": [ - "azsdk-net-Storage.Blobs/12.9.0-alpha.20210217.1", - "(.NET 5.0.3; Microsoft Windows 10.0.19042)" + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" ], "x-ms-blob-public-access": "container", "x-ms-client-request-id": "ae529654-492c-4551-b8a6-bad8ad7b6be9", - "x-ms-date": "Wed, 17 Feb 2021 18:51:29 GMT", + "x-ms-date": "Thu, 03 Jun 2021 16:17:56 GMT", "x-ms-return-client-request-id": "true", - "x-ms-version": "2020-08-04" + "x-ms-version": "2020-08-04" }, "RequestBody": null, "StatusCode": 201, "ResponseHeaders": { "Content-Length": "0", - "Date": "Wed, 17 Feb 2021 18:51:28 GMT", - "ETag": "\u00220x8D8D37509547B57\u0022", - "Last-Modified": "Wed, 17 Feb 2021 18:51:29 GMT", + "Date": "Thu, 03 Jun 2021 16:17:56 GMT", + "ETag": "\u00220x8D926AB26178D7F\u0022", + "Last-Modified": "Thu, 03 Jun 2021 16:17:56 GMT", "Server": [ "Windows-Azure-Blob/1.0", "Microsoft-HTTPAPI/2.0" ], "x-ms-client-request-id": "ae529654-492c-4551-b8a6-bad8ad7b6be9", - "x-ms-request-id": "136357c3-e01e-0095-715d-053277000000", - "x-ms-version": "2020-08-04" + "x-ms-request-id": "88a8b559-601e-004d-4a94-58824c000000", + "x-ms-version": "2020-08-04" }, "ResponseBody": [] }, { - "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-a0cd24c1-9110-ab02-3f4e-bcbc172eb6b4/test-blob-c0dea307-ad15-aef3-5dfe-8f7867ac0ec7", + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-a0cd24c1-9110-ab02-3f4e-bcbc172eb6b4/test-blob-c0dea307-ad15-aef3-5dfe-8f7867ac0ec7", "RequestMethod": "PUT", "RequestHeaders": { "Accept": "application/xml", "Authorization": "Sanitized", - "traceparent": "00-a02451069180a4408aac81fa25465af7-f0bbf5f5361ebe41-00", + "traceparent": "00-fe14d051b2773a42b56069b76f73e50c-a790d293729c6e40-00", "User-Agent": [ - "azsdk-net-Storage.Blobs/12.9.0-alpha.20210217.1", - "(.NET 5.0.3; Microsoft Windows 10.0.19042)" + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" ], "x-ms-blob-type": "AppendBlob", "x-ms-client-request-id": "f94e402b-8899-a638-a3a4-512ebad9dd0b", - "x-ms-date": "Wed, 17 Feb 2021 18:51:29 GMT", + "x-ms-date": "Thu, 03 Jun 2021 16:17:57 GMT", "x-ms-return-client-request-id": "true", - "x-ms-version": "2020-08-04" + "x-ms-version": "2020-08-04" }, "RequestBody": null, "StatusCode": 201, "ResponseHeaders": { "Content-Length": "0", - "Date": "Wed, 17 Feb 2021 18:51:28 GMT", - "ETag": "\u00220x8D8D375095F173F\u0022", - "Last-Modified": "Wed, 17 Feb 2021 18:51:29 GMT", + "Date": "Thu, 03 Jun 2021 16:17:57 GMT", + "ETag": "\u00220x8D926AB26384AC9\u0022", + "Last-Modified": "Thu, 03 Jun 2021 16:17:57 GMT", "Server": [ "Windows-Azure-Blob/1.0", "Microsoft-HTTPAPI/2.0" ], "x-ms-client-request-id": "f94e402b-8899-a638-a3a4-512ebad9dd0b", - "x-ms-request-id": "136357d4-e01e-0095-7e5d-053277000000", + "x-ms-request-id": "88a8b576-601e-004d-5e94-58824c000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2021-02-17T18:51:29.4786367Z" + "x-ms-version": "2020-08-04", + "x-ms-version-id": "2021-06-03T16:17:57.2122313Z" }, "ResponseBody": [] }, { - "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-a0cd24c1-9110-ab02-3f4e-bcbc172eb6b4/test-blob-c0dea307-ad15-aef3-5dfe-8f7867ac0ec7?comp=metadata", + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-a0cd24c1-9110-ab02-3f4e-bcbc172eb6b4/test-blob-c0dea307-ad15-aef3-5dfe-8f7867ac0ec7?comp=metadata", "RequestMethod": "PUT", "RequestHeaders": { "Accept": "application/xml", "Authorization": "Sanitized", - "traceparent": "00-0f0009bedacb6d4b9c9c2a194ab51ac8-5e5db2aff466a84c-00", + "traceparent": "00-2e22167a67127c4680af3decd7c6cd36-3d070b2fb47e1943-00", "User-Agent": [ - "azsdk-net-Storage.Blobs/12.9.0-alpha.20210217.1", - "(.NET 5.0.3; Microsoft Windows 10.0.19042)" + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" ], "x-ms-client-request-id": "274dfadc-145d-7d2e-36c1-dc37b559ce7f", - "x-ms-date": "Wed, 17 Feb 2021 18:51:29 GMT", + "x-ms-date": "Thu, 03 Jun 2021 16:17:57 GMT", "x-ms-meta-Capital": "letter", "x-ms-meta-foo": "bar", "x-ms-meta-meta": "data", "x-ms-meta-UPPER": "case", "x-ms-return-client-request-id": "true", - "x-ms-version": "2020-08-04" + "x-ms-version": "2020-08-04" }, "RequestBody": null, "StatusCode": 200, "ResponseHeaders": { "Content-Length": "0", - "Date": "Wed, 17 Feb 2021 18:51:28 GMT", - "ETag": "\u00220x8D8D3750967A44E\u0022", - "Last-Modified": "Wed, 17 Feb 2021 18:51:29 GMT", + "Date": "Thu, 03 Jun 2021 16:17:57 GMT", + "ETag": "\u00220x8D926AB264826FA\u0022", + "Last-Modified": "Thu, 03 Jun 2021 16:17:57 GMT", "Server": [ "Windows-Azure-Blob/1.0", "Microsoft-HTTPAPI/2.0" ], "x-ms-client-request-id": "274dfadc-145d-7d2e-36c1-dc37b559ce7f", - "x-ms-request-id": "136357e1-e01e-0095-095d-053277000000", + "x-ms-request-id": "88a8b584-601e-004d-6694-58824c000000", "x-ms-request-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2021-02-17T18:51:29.5356766Z" + "x-ms-version": "2020-08-04", + "x-ms-version-id": "2021-06-03T16:17:57.3171722Z" }, "ResponseBody": [] }, { - "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-a0cd24c1-9110-ab02-3f4e-bcbc172eb6b4/test-blob-c0dea307-ad15-aef3-5dfe-8f7867ac0ec7?versionid=2021-02-17T18:51:29.4786367Z", + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-a0cd24c1-9110-ab02-3f4e-bcbc172eb6b4/test-blob-c0dea307-ad15-aef3-5dfe-8f7867ac0ec7?versionid=2021-06-03T16:17:57.2122313Z", "RequestMethod": "HEAD", "RequestHeaders": { "Accept": "application/xml", "Authorization": "Sanitized", "User-Agent": [ - "azsdk-net-Storage.Blobs/12.9.0-alpha.20210217.1", - "(.NET 5.0.3; Microsoft Windows 10.0.19042)" + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" ], "x-ms-client-request-id": "c051e24e-b68b-83ad-c454-07520ed54ac1", - "x-ms-date": "Wed, 17 Feb 2021 18:51:29 GMT", + "x-ms-date": "Thu, 03 Jun 2021 16:17:57 GMT", "x-ms-return-client-request-id": "true", - "x-ms-version": "2020-08-04" + "x-ms-version": "2020-08-04" }, "RequestBody": null, "StatusCode": 200, @@ -130,9 +130,9 @@ "Accept-Ranges": "bytes", "Content-Length": "0", "Content-Type": "application/octet-stream", - "Date": "Wed, 17 Feb 2021 18:51:28 GMT", - "ETag": "\u00220x8D8D375095F173F\u0022", - "Last-Modified": "Wed, 17 Feb 2021 18:51:29 GMT", + "Date": "Thu, 03 Jun 2021 16:17:57 GMT", + "ETag": "\u00220x8D926AB26384AC9\u0022", + "Last-Modified": "Thu, 03 Jun 2021 16:17:57 GMT", "Server": [ "Windows-Azure-Blob/1.0", "Microsoft-HTTPAPI/2.0" @@ -140,48 +140,95 @@ "x-ms-blob-committed-block-count": "0", "x-ms-blob-type": "AppendBlob", "x-ms-client-request-id": "c051e24e-b68b-83ad-c454-07520ed54ac1", - "x-ms-creation-time": "Wed, 17 Feb 2021 18:51:29 GMT", - "x-ms-request-id": "136357f4-e01e-0095-1a5d-053277000000", + "x-ms-creation-time": "Thu, 03 Jun 2021 16:17:57 GMT", + "x-ms-request-id": "88a8b589-601e-004d-6994-58824c000000", "x-ms-server-encrypted": "true", - "x-ms-version": "2020-08-04", - "x-ms-version-id": "2021-02-17T18:51:29.4786367Z" + "x-ms-version": "2020-08-04", + "x-ms-version-id": "2021-06-03T16:17:57.2122313Z" }, "ResponseBody": [] }, { - "RequestUri": "https://seanmcccanary3.blob.core.windows.net/test-container-a0cd24c1-9110-ab02-3f4e-bcbc172eb6b4?restype=container", - "RequestMethod": "DELETE", + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-a0cd24c1-9110-ab02-3f4e-bcbc172eb6b4/test-blob-c0dea307-ad15-aef3-5dfe-8f7867ac0ec7", + "RequestMethod": "HEAD", "RequestHeaders": { "Accept": "application/xml", "Authorization": "Sanitized", - "traceparent": "00-239b7c793f289d4cb356dbfcaed4fa3b-6828bb3d0d59df4c-00", + "traceparent": "00-b6008a7f6e3c024c9a6502e3b468b1cf-417141288f7cd14f-00", "User-Agent": [ - "azsdk-net-Storage.Blobs/12.9.0-alpha.20210217.1", - "(.NET 5.0.3; Microsoft Windows 10.0.19042)" + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" ], "x-ms-client-request-id": "d2e95c62-0e07-2df3-acb3-a1c6dc30315c", - "x-ms-date": "Wed, 17 Feb 2021 18:51:29 GMT", + "x-ms-date": "Thu, 03 Jun 2021 16:17:57 GMT", "x-ms-return-client-request-id": "true", - "x-ms-version": "2020-08-04" + "x-ms-version": "2020-08-04" }, "RequestBody": null, - "StatusCode": 202, + "StatusCode": 200, "ResponseHeaders": { + "Accept-Ranges": "bytes", "Content-Length": "0", - "Date": "Wed, 17 Feb 2021 18:51:29 GMT", + "Content-Type": "application/octet-stream", + "Date": "Thu, 03 Jun 2021 16:17:57 GMT", + "ETag": "\u00220x8D926AB264826FA\u0022", + "Last-Modified": "Thu, 03 Jun 2021 16:17:57 GMT", "Server": [ "Windows-Azure-Blob/1.0", "Microsoft-HTTPAPI/2.0" ], + "x-ms-blob-committed-block-count": "0", + "x-ms-blob-type": "AppendBlob", "x-ms-client-request-id": "d2e95c62-0e07-2df3-acb3-a1c6dc30315c", - "x-ms-request-id": "136357fb-e01e-0095-215d-053277000000", - "x-ms-version": "2020-08-04" + "x-ms-creation-time": "Thu, 03 Jun 2021 16:17:57 GMT", + "x-ms-is-current-version": "true", + "x-ms-lease-state": "available", + "x-ms-lease-status": "unlocked", + "x-ms-meta-Capital": "letter", + "x-ms-meta-foo": "bar", + "x-ms-meta-meta": "data", + "x-ms-meta-UPPER": "case", + "x-ms-request-id": "88a8b58f-601e-004d-6f94-58824c000000", + "x-ms-server-encrypted": "true", + "x-ms-version": "2020-08-04", + "x-ms-version-id": "2021-06-03T16:17:57.3171722Z" + }, + "ResponseBody": [] + }, + { + "RequestUri": "https://amandadev3.blob.core.windows.net/test-container-a0cd24c1-9110-ab02-3f4e-bcbc172eb6b4?restype=container", + "RequestMethod": "DELETE", + "RequestHeaders": { + "Accept": "application/xml", + "Authorization": "Sanitized", + "traceparent": "00-2292bab8f411aa499a893e481844fa90-2cf38fe00a86b446-00", + "User-Agent": [ + "azsdk-net-Storage.Blobs/12.9.0-alpha.20210603.1", + "(.NET Core 4.6.30015.01; Microsoft Windows 10.0.19042 )" + ], + "x-ms-client-request-id": "b2efb5f8-78ec-78ba-f340-41384e8b1b47", + "x-ms-date": "Thu, 03 Jun 2021 16:17:57 GMT", + "x-ms-return-client-request-id": "true", + "x-ms-version": "2020-08-04" + }, + "RequestBody": null, + "StatusCode": 202, + "ResponseHeaders": { + "Content-Length": "0", + "Date": "Thu, 03 Jun 2021 16:17:57 GMT", + "Server": [ + "Windows-Azure-Blob/1.0", + "Microsoft-HTTPAPI/2.0" + ], + "x-ms-client-request-id": "b2efb5f8-78ec-78ba-f340-41384e8b1b47", + "x-ms-request-id": "88a8b593-601e-004d-7294-58824c000000", + "x-ms-version": "2020-08-04" }, "ResponseBody": [] } ], "Variables": { "RandomSeed": "197232030", - "Storage_TestConfigDefault": "ProductionTenant\nseanmcccanary3\nU2FuaXRpemVk\nhttps://seanmcccanary3.blob.core.windows.net\nhttps://seanmcccanary3.file.core.windows.net\nhttps://seanmcccanary3.queue.core.windows.net\nhttps://seanmcccanary3.table.core.windows.net\n\n\n\n\nhttps://seanmcccanary3-secondary.blob.core.windows.net\nhttps://seanmcccanary3-secondary.file.core.windows.net\nhttps://seanmcccanary3-secondary.queue.core.windows.net\nhttps://seanmcccanary3-secondary.table.core.windows.net\n\nSanitized\n\n\nCloud\nBlobEndpoint=https://seanmcccanary3.blob.core.windows.net/;QueueEndpoint=https://seanmcccanary3.queue.core.windows.net/;FileEndpoint=https://seanmcccanary3.file.core.windows.net/;BlobSecondaryEndpoint=https://seanmcccanary3-secondary.blob.core.windows.net/;QueueSecondaryEndpoint=https://seanmcccanary3-secondary.queue.core.windows.net/;FileSecondaryEndpoint=https://seanmcccanary3-secondary.file.core.windows.net/;AccountName=seanmcccanary3;AccountKey=Kg==;\nseanscope1" + "Storage_TestConfigDefault": "ProductionTenant\namandadev3\nU2FuaXRpemVk\nhttps://amandadev3.blob.core.windows.net\nhttps://amandadev3.file.core.windows.net\nhttps://amandadev3.queue.core.windows.net\nhttps://amandadev3.table.core.windows.net\n\n\n\n\nhttps://amandadev3-secondary.blob.core.windows.net\nhttps://amandadev3-secondary.file.core.windows.net\nhttps://amandadev3-secondary.queue.core.windows.net\nhttps://amandadev3-secondary.table.core.windows.net\n\nSanitized\n\n\nCloud\nBlobEndpoint=https://amandadev3.blob.core.windows.net/;QueueEndpoint=https://amandadev3.queue.core.windows.net/;FileEndpoint=https://amandadev3.file.core.windows.net/;BlobSecondaryEndpoint=https://amandadev3-secondary.blob.core.windows.net/;QueueSecondaryEndpoint=https://amandadev3-secondary.queue.core.windows.net/;FileSecondaryEndpoint=https://amandadev3-secondary.file.core.windows.net/;AccountName=amandadev3;AccountKey=Kg==;\ntestscope2" } } \ No newline at end of file