From c15f3b49ecc0c7d00c34a332d48a08cfa9df54ab Mon Sep 17 00:00:00 2001 From: Sean McCullough Date: Fri, 18 Jun 2021 15:35:54 -0500 Subject: [PATCH 1/8] Added RequestConditions validation to PageBlobClient --- .../Azure.Storage.Blobs/src/BlobExtensions.cs | 37 ++++++++++++++++++ .../Internal/BlobRequestConditionProperty.cs | 5 ++- .../Azure.Storage.Blobs/src/PageBlobClient.cs | 8 ++++ .../tests/PageBlobClientTests.cs | 38 +++++++++++++++++++ ...stConditions(%IfSequenceNumberEqual%).json | 6 +++ ...ditions(%IfSequenceNumberEqual%)Async.json | 6 +++ ...onditions(%IfSequenceNumberLessThan%).json | 6 +++ ...ions(%IfSequenceNumberLessThan%)Async.json | 6 +++ ...ns(%IfSequenceNumberLessThanOrEqual%).json | 6 +++ ...fSequenceNumberLessThanOrEqual%)Async.json | 6 +++ 10 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json diff --git a/sdk/storage/Azure.Storage.Blobs/src/BlobExtensions.cs b/sdk/storage/Azure.Storage.Blobs/src/BlobExtensions.cs index 9f6d0ad097d8..874c393394f3 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/BlobExtensions.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/BlobExtensions.cs @@ -1475,6 +1475,43 @@ internal static void ValidateConditionsNotPresent(this AppendBlobRequestConditio throw new ArgumentException($"{nameof(AppendBlobRequestConditions.IfMaxSizeLessThanOrEqual)} is not applicable to this API."); } } + + internal static void ValidateConditionsNotPresent(this PageBlobRequestConditions requestConditions, BlobRequestConditionProperty invalidConditions) + { + if (AppContextSwitchHelper.GetConfigValue( + Constants.DisableRequestConditionsValidationSwitchName, + Constants.DisableRequestConditionsValidationEnvVar)) + { + return; + } + + if (requestConditions == null) + { + return; + } + + // Validate BlobRequestConditions + ((BlobRequestConditions)requestConditions).ValidateConditionsNotPresent(invalidConditions); + + // Validate PageBlobRequestConditions specific conditions. + if ((invalidConditions & BlobRequestConditionProperty.IfSequenceNumberLessThan) == BlobRequestConditionProperty.IfSequenceNumberLessThan + && requestConditions.IfSequenceNumberLessThan != null) + { + throw new ArgumentException($"{nameof(PageBlobRequestConditions.IfSequenceNumberLessThan)} is not applicable to this API."); + } + + if ((invalidConditions & BlobRequestConditionProperty.IfSequenceNumberLessThanOrEqual) == BlobRequestConditionProperty.IfSequenceNumberLessThanOrEqual + && requestConditions.IfSequenceNumberLessThanOrEqual != null) + { + throw new ArgumentException($"{nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual)} is not applicable to this API."); + } + + if ((invalidConditions & BlobRequestConditionProperty.IfSequenceNumberEqual) == BlobRequestConditionProperty.IfSequenceNumberEqual + && requestConditions.IfSequenceNumberEqual != null) + { + throw new ArgumentException($"{nameof(PageBlobRequestConditions.IfSequenceNumberEqual)} is not applicable to this API."); + } + } #endregion } } diff --git a/sdk/storage/Azure.Storage.Blobs/src/Models/Internal/BlobRequestConditionProperty.cs b/sdk/storage/Azure.Storage.Blobs/src/Models/Internal/BlobRequestConditionProperty.cs index 7446cb3f16a7..4b764d0b7c86 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/Models/Internal/BlobRequestConditionProperty.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/Models/Internal/BlobRequestConditionProperty.cs @@ -13,6 +13,9 @@ internal enum BlobRequestConditionProperty IfMatch = 16, IfNoneMatch = 32, IfAppendPositionEqual = 64, - IfMaxSizeLessThanOrEqual = 128 + IfMaxSizeLessThanOrEqual = 128, + IfSequenceNumberLessThan = 256, + IfSequenceNumberLessThanOrEqual = 512, + IfSequenceNumberEqual = 1024 } } diff --git a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs index 7cf835a74ea9..4bfd91740928 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs @@ -969,6 +969,11 @@ private async Task> CreateInternal( operationName ??= $"{nameof(PageBlobClient)}.{nameof(Create)}"; DiagnosticScope scope = ClientConfiguration.ClientDiagnostics.CreateScope(operationName); + conditions.ValidateConditionsNotPresent( + BlobRequestConditionProperty.IfSequenceNumberLessThanOrEqual + | BlobRequestConditionProperty.IfSequenceNumberLessThan + | BlobRequestConditionProperty.IfSequenceNumberEqual); + try { scope.Start(); @@ -1466,6 +1471,9 @@ private async Task> ClearPagesInternal( DiagnosticScope scope = ClientConfiguration.ClientDiagnostics.CreateScope($"{nameof(PageBlobClient)}.{nameof(ClearPages)}"); + // All PageBlobRequestConditions are valid. + conditions.ValidateConditionsNotPresent(BlobRequestConditionProperty.None); + try { scope.Start(); diff --git a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs index d9d7d47293ae..d8e1f246c86d 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs @@ -160,6 +160,44 @@ public async Task CreateAsync_Min() Assert.IsNotNull(response.GetRawResponse().Headers.RequestId); } + [RecordedTest] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThan))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberEqual))] + public async Task CreateAsync_InvalidRequestConditions(string invalidCondition) + { + // Arrange + Uri uri = new Uri("https://www.doesntmatter.com"); + PageBlobClient pageBlobClient = new PageBlobClient(uri, GetOptions()); + + PageBlobRequestConditions conditions = new PageBlobRequestConditions(); + + switch (invalidCondition) + { + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual): + conditions.IfSequenceNumberLessThanOrEqual = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThan): + conditions.IfSequenceNumberLessThan = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberEqual): + conditions.IfSequenceNumberEqual = 0; + break; + } + + PageBlobCreateOptions options = new PageBlobCreateOptions + { + Conditions = conditions + }; + + // Act + await TestHelper.AssertExpectedExceptionAsync( + pageBlobClient.CreateAsync( + size: 0, + options), + e => Assert.AreEqual($"{invalidCondition} is not applicable to this API.", e.Message)); + } + [RecordedTest] [ServiceVersion(Min = BlobClientOptions.ServiceVersion.V2019_12_12)] public async Task CreateAsync_Tags() diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json new file mode 100644 index 000000000000..13160d8261a1 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "212019963" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json new file mode 100644 index 000000000000..e101262e67a4 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1929196373" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json new file mode 100644 index 000000000000..91b601ab6d08 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "126971486" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json new file mode 100644 index 000000000000..0d0462c45c82 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "2122210267" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json new file mode 100644 index 000000000000..b44ac0b0a461 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1921297090" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json new file mode 100644 index 000000000000..d0034a79c64b --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/CreateAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1511511372" + } +} \ No newline at end of file From 363ebefb7f1429be3ccb7ee21a8df0e181a7da69 Mon Sep 17 00:00:00 2001 From: Sean McCullough Date: Fri, 18 Jun 2021 15:41:46 -0500 Subject: [PATCH 2/8] GetPageRangesDiff --- .../Azure.Storage.Blobs/src/PageBlobClient.cs | 5 +++ .../tests/PageBlobClientTests.cs | 32 +++++++++++++++++++ ...stConditions(%IfSequenceNumberEqual%).json | 6 ++++ ...ditions(%IfSequenceNumberEqual%)Async.json | 6 ++++ ...onditions(%IfSequenceNumberLessThan%).json | 6 ++++ ...ions(%IfSequenceNumberLessThan%)Async.json | 6 ++++ ...ns(%IfSequenceNumberLessThanOrEqual%).json | 6 ++++ ...fSequenceNumberLessThanOrEqual%)Async.json | 6 ++++ 8 files changed, 73 insertions(+) create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json diff --git a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs index 4bfd91740928..0ebe349486c7 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs @@ -1945,6 +1945,11 @@ private async Task> GetPageRangesDiffInternal( operationName ??= $"{nameof(PageBlobClient)}.{nameof(GetPageRangesDiff)}"; DiagnosticScope scope = ClientConfiguration.ClientDiagnostics.CreateScope(operationName); + conditions.ValidateConditionsNotPresent( + BlobRequestConditionProperty.IfSequenceNumberLessThanOrEqual + | BlobRequestConditionProperty.IfSequenceNumberLessThan + | BlobRequestConditionProperty.IfSequenceNumberEqual); + try { scope.Start(); diff --git a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs index d8e1f246c86d..e941ffbddc64 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs @@ -1338,6 +1338,38 @@ public async Task GetPageRangesDiffAsync() Assert.AreEqual(3 * Constants.KB, range.Offset + range.Length); } + [RecordedTest] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThan))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberEqual))] + public async Task GetPageRangesDiffAsync_InvalidRequestConditions(string invalidCondition) + { + // Arrange + Uri uri = new Uri("https://www.doesntmatter.com"); + PageBlobClient pageBlobClient = new PageBlobClient(uri, GetOptions()); + + PageBlobRequestConditions conditions = new PageBlobRequestConditions(); + + switch (invalidCondition) + { + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual): + conditions.IfSequenceNumberLessThanOrEqual = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThan): + conditions.IfSequenceNumberLessThan = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberEqual): + conditions.IfSequenceNumberEqual = 0; + break; + } + + // Act + await TestHelper.AssertExpectedExceptionAsync( + pageBlobClient.GetPageRangesDiffAsync( + conditions: conditions), + e => Assert.AreEqual($"{invalidCondition} is not applicable to this API.", e.Message)); + } + [RecordedTest] public async Task GetPageRangesDiffAsync_Error() { diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json new file mode 100644 index 000000000000..70d19afbbdfe --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "45286486" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json new file mode 100644 index 000000000000..fc9c8efc9eb9 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1841398242" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json new file mode 100644 index 000000000000..70d19afbbdfe --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "45286486" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json new file mode 100644 index 000000000000..fc9c8efc9eb9 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1841398242" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json new file mode 100644 index 000000000000..eb2c28cf0ede --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1960885850" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json new file mode 100644 index 000000000000..fc9c8efc9eb9 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesDiffAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1841398242" + } +} \ No newline at end of file From c49a954d09cbe89cfc5760231c25d29538bd8d3a Mon Sep 17 00:00:00 2001 From: Sean McCullough Date: Fri, 18 Jun 2021 15:43:51 -0500 Subject: [PATCH 3/8] GetPageRanges --- .../Azure.Storage.Blobs/src/PageBlobClient.cs | 5 +++ .../tests/PageBlobClientTests.cs | 32 +++++++++++++++++++ ...stConditions(%IfSequenceNumberEqual%).json | 6 ++++ ...ditions(%IfSequenceNumberEqual%)Async.json | 6 ++++ ...onditions(%IfSequenceNumberLessThan%).json | 6 ++++ ...ions(%IfSequenceNumberLessThan%)Async.json | 6 ++++ ...ns(%IfSequenceNumberLessThanOrEqual%).json | 6 ++++ ...fSequenceNumberLessThanOrEqual%)Async.json | 6 ++++ 8 files changed, 73 insertions(+) create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json diff --git a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs index 0ebe349486c7..67b95303a6f3 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs @@ -1688,6 +1688,11 @@ private async Task> GetPageRangesInternal( DiagnosticScope scope = ClientConfiguration.ClientDiagnostics.CreateScope($"{nameof(PageBlobClient)}.{nameof(GetPageRanges)}"); + conditions.ValidateConditionsNotPresent( + BlobRequestConditionProperty.IfSequenceNumberLessThanOrEqual + | BlobRequestConditionProperty.IfSequenceNumberLessThan + | BlobRequestConditionProperty.IfSequenceNumberEqual); + try { scope.Start(); diff --git a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs index e941ffbddc64..37e53527ee93 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs @@ -1118,6 +1118,38 @@ public async Task GetPageRangesAsync() Assert.AreEqual(3 * Constants.KB, range2.Offset + range2.Length); } + [RecordedTest] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThan))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberEqual))] + public async Task GetPageRangesAsync_InvalidRequestConditions(string invalidCondition) + { + // Arrange + Uri uri = new Uri("https://www.doesntmatter.com"); + PageBlobClient pageBlobClient = new PageBlobClient(uri, GetOptions()); + + PageBlobRequestConditions conditions = new PageBlobRequestConditions(); + + switch (invalidCondition) + { + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual): + conditions.IfSequenceNumberLessThanOrEqual = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThan): + conditions.IfSequenceNumberLessThan = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberEqual): + conditions.IfSequenceNumberEqual = 0; + break; + } + + // Act + await TestHelper.AssertExpectedExceptionAsync( + pageBlobClient.GetPageRangesAsync( + conditions: conditions), + e => Assert.AreEqual($"{invalidCondition} is not applicable to this API.", e.Message)); + } + [RecordedTest] public async Task GetPageRangesAsync_Clear() { diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json new file mode 100644 index 000000000000..1dcc5ac5df1a --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "335083613" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json new file mode 100644 index 000000000000..1dcc5ac5df1a --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "335083613" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json new file mode 100644 index 000000000000..1dcc5ac5df1a --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "335083613" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json new file mode 100644 index 000000000000..1dcc5ac5df1a --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "335083613" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json new file mode 100644 index 000000000000..0a37e1f522d4 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "873727258" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json new file mode 100644 index 000000000000..1dcc5ac5df1a --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/GetPageRangesAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "335083613" + } +} \ No newline at end of file From 6b339900992581cd22f0a295ff14160582770dd2 Mon Sep 17 00:00:00 2001 From: Sean McCullough Date: Fri, 18 Jun 2021 15:46:25 -0500 Subject: [PATCH 4/8] Resize --- .../Azure.Storage.Blobs/src/PageBlobClient.cs | 5 +++ .../tests/PageBlobClientTests.cs | 33 +++++++++++++++++++ ...stConditions(%IfSequenceNumberEqual%).json | 6 ++++ ...ditions(%IfSequenceNumberEqual%)Async.json | 6 ++++ ...onditions(%IfSequenceNumberLessThan%).json | 6 ++++ ...ions(%IfSequenceNumberLessThan%)Async.json | 6 ++++ ...ns(%IfSequenceNumberLessThanOrEqual%).json | 6 ++++ ...fSequenceNumberLessThanOrEqual%)Async.json | 6 ++++ 8 files changed, 74 insertions(+) create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json diff --git a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs index 67b95303a6f3..1f356cea6d63 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs @@ -2280,6 +2280,11 @@ private async Task> ResizeInternal( DiagnosticScope scope = ClientConfiguration.ClientDiagnostics.CreateScope($"{nameof(PageBlobClient)}.{nameof(Resize)}"); + conditions.ValidateConditionsNotPresent( + BlobRequestConditionProperty.IfSequenceNumberLessThanOrEqual + | BlobRequestConditionProperty.IfSequenceNumberLessThan + | BlobRequestConditionProperty.IfSequenceNumberEqual); + try { scope.Start(); diff --git a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs index 37e53527ee93..c8060095a580 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs @@ -1859,6 +1859,39 @@ public async Task ResizeAsync() Assert.AreEqual(newSize, response.Value.ContentLength); } + [RecordedTest] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThan))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberEqual))] + public async Task ResizeAsync_InvalidRequestConditions(string invalidCondition) + { + // Arrange + Uri uri = new Uri("https://www.doesntmatter.com"); + PageBlobClient pageBlobClient = new PageBlobClient(uri, GetOptions()); + + PageBlobRequestConditions conditions = new PageBlobRequestConditions(); + + switch (invalidCondition) + { + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual): + conditions.IfSequenceNumberLessThanOrEqual = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThan): + conditions.IfSequenceNumberLessThan = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberEqual): + conditions.IfSequenceNumberEqual = 0; + break; + } + + // Act + await TestHelper.AssertExpectedExceptionAsync( + pageBlobClient.ResizeAsync( + size: 0, + conditions: conditions), + e => Assert.AreEqual($"{invalidCondition} is not applicable to this API.", e.Message)); + } + [RecordedTest] public async Task ResizeAsync_CPK() { diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json new file mode 100644 index 000000000000..72883bf8f538 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1672192131" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json new file mode 100644 index 000000000000..94360700a7d2 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1320820240" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json new file mode 100644 index 000000000000..72883bf8f538 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1672192131" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json new file mode 100644 index 000000000000..94360700a7d2 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1320820240" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json new file mode 100644 index 000000000000..d7d18b001c13 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "63352129" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json new file mode 100644 index 000000000000..94360700a7d2 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/ResizeAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1320820240" + } +} \ No newline at end of file From 69f656113db38e93f1e2f6e792580b57814ab52b Mon Sep 17 00:00:00 2001 From: Sean McCullough Date: Fri, 18 Jun 2021 15:50:38 -0500 Subject: [PATCH 5/8] StartCopyIncremental --- .../Azure.Storage.Blobs/src/PageBlobClient.cs | 6 +++ .../Azure.Storage.Blobs/tests/BlobTestBase.cs | 2 +- .../tests/PageBlobClientTests.cs | 38 +++++++++++++++++++ ...stConditions(%IfSequenceNumberEqual%).json | 6 +++ ...ditions(%IfSequenceNumberEqual%)Async.json | 6 +++ ...onditions(%IfSequenceNumberLessThan%).json | 6 +++ ...ions(%IfSequenceNumberLessThan%)Async.json | 6 +++ ...ns(%IfSequenceNumberLessThanOrEqual%).json | 6 +++ ...fSequenceNumberLessThanOrEqual%)Async.json | 6 +++ ...c_InvalidRequestConditions(%LeaseId%).json | 6 +++ ...alidRequestConditions(%LeaseId%)Async.json | 6 +++ 11 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%LeaseId%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%LeaseId%)Async.json diff --git a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs index 1f356cea6d63..3f20c2152fe1 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs @@ -2911,6 +2911,12 @@ private async Task> StartCopyIncrementalInternal( DiagnosticScope scope = ClientConfiguration.ClientDiagnostics.CreateScope($"{nameof(PageBlobClient)}.{nameof(StartCopyIncremental)}"); + conditions.ValidateConditionsNotPresent( + BlobRequestConditionProperty.LeaseId + | BlobRequestConditionProperty.IfSequenceNumberLessThanOrEqual + | BlobRequestConditionProperty.IfSequenceNumberLessThan + | BlobRequestConditionProperty.IfSequenceNumberEqual); + try { scope.Start(); diff --git a/sdk/storage/Azure.Storage.Blobs/tests/BlobTestBase.cs b/sdk/storage/Azure.Storage.Blobs/tests/BlobTestBase.cs index 5a96220d1dde..dbc7787534f8 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/BlobTestBase.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/BlobTestBase.cs @@ -47,7 +47,7 @@ protected string SecondaryStorageTenantSecondaryHost() => new Uri(TestConfigSecondary.BlobServiceSecondaryEndpoint).Host; public BlobTestBase(bool async, BlobClientOptions.ServiceVersion serviceVersion, RecordedTestMode? mode = null) - : base(async, mode) + : base(async, RecordedTestMode.Record) { _serviceVersion = serviceVersion; } diff --git a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs index c8060095a580..a84b1aecdc59 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs @@ -2250,6 +2250,44 @@ public async Task StartCopyIncrementalAsync() Assert.AreEqual(CopyStatus.Success, properties.Value.CopyStatus); } + [RecordedTest] + [TestCase(nameof(PageBlobRequestConditions.LeaseId))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThan))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberEqual))] + public async Task StartCopyIncrementalAsync_InvalidRequestConditions(string invalidCondition) + { + // Arrange + Uri uri = new Uri("https://www.doesntmatter.com"); + PageBlobClient pageBlobClient = new PageBlobClient(uri, GetOptions()); + + PageBlobRequestConditions conditions = new PageBlobRequestConditions(); + + switch (invalidCondition) + { + case nameof(PageBlobRequestConditions.LeaseId): + conditions.LeaseId = "LeaseId"; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual): + conditions.IfSequenceNumberLessThanOrEqual = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThan): + conditions.IfSequenceNumberLessThan = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberEqual): + conditions.IfSequenceNumberEqual = 0; + break; + } + + // Act + await TestHelper.AssertExpectedExceptionAsync( + pageBlobClient.StartCopyIncrementalAsync( + uri, + "snapshot", + conditions: conditions), + e => Assert.AreEqual($"{invalidCondition} is not applicable to this API.", e.Message)); + } + [RecordedTest] public async Task StartCopyIncrementalAsync_Error() { diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json new file mode 100644 index 000000000000..8037921403b7 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1860489741" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json new file mode 100644 index 000000000000..28bd8bb3636b --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "483534022" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json new file mode 100644 index 000000000000..8037921403b7 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1860489741" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json new file mode 100644 index 000000000000..28bd8bb3636b --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "483534022" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json new file mode 100644 index 000000000000..8037921403b7 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1860489741" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json new file mode 100644 index 000000000000..28bd8bb3636b --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "483534022" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%LeaseId%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%LeaseId%).json new file mode 100644 index 000000000000..1846d300c9d7 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%LeaseId%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "251649739" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%LeaseId%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%LeaseId%)Async.json new file mode 100644 index 000000000000..28bd8bb3636b --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/StartCopyIncrementalAsync_InvalidRequestConditions(%LeaseId%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "483534022" + } +} \ No newline at end of file From bb742d74e939647b12cd98e7f4957fe85ff5ef2a Mon Sep 17 00:00:00 2001 From: Sean McCullough Date: Fri, 18 Jun 2021 15:53:34 -0500 Subject: [PATCH 6/8] UpdateSequenceNumber --- .../Azure.Storage.Blobs/src/PageBlobClient.cs | 5 +++ .../tests/PageBlobClientTests.cs | 33 +++++++++++++++++++ ...stConditions(%IfSequenceNumberEqual%).json | 6 ++++ ...ditions(%IfSequenceNumberEqual%)Async.json | 6 ++++ ...onditions(%IfSequenceNumberLessThan%).json | 6 ++++ ...ions(%IfSequenceNumberLessThan%)Async.json | 6 ++++ ...ns(%IfSequenceNumberLessThanOrEqual%).json | 6 ++++ ...fSequenceNumberLessThanOrEqual%)Async.json | 6 ++++ 8 files changed, 74 insertions(+) create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json diff --git a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs index 3f20c2152fe1..ada1215b2638 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs @@ -2528,6 +2528,11 @@ private async Task> UpdateSequenceNumberInternal( DiagnosticScope scope = ClientConfiguration.ClientDiagnostics.CreateScope($"{nameof(PageBlobClient)}.{nameof(UpdateSequenceNumber)}"); + conditions.ValidateConditionsNotPresent( + BlobRequestConditionProperty.IfSequenceNumberLessThanOrEqual + | BlobRequestConditionProperty.IfSequenceNumberLessThan + | BlobRequestConditionProperty.IfSequenceNumberEqual); + try { scope.Start(); diff --git a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs index a84b1aecdc59..50d16642e820 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs @@ -2076,6 +2076,39 @@ await blob.UpdateSequenceNumberAsync( Assert.AreEqual(sequenceAccessNumber, response.Value.BlobSequenceNumber); } + [RecordedTest] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThan))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberEqual))] + public async Task UpdateSequenceNumberAsync_InvalidRequestConditions(string invalidCondition) + { + // Arrange + Uri uri = new Uri("https://www.doesntmatter.com"); + PageBlobClient pageBlobClient = new PageBlobClient(uri, GetOptions()); + + PageBlobRequestConditions conditions = new PageBlobRequestConditions(); + + switch (invalidCondition) + { + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual): + conditions.IfSequenceNumberLessThanOrEqual = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThan): + conditions.IfSequenceNumberLessThan = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberEqual): + conditions.IfSequenceNumberEqual = 0; + break; + } + + // Act + await TestHelper.AssertExpectedExceptionAsync( + pageBlobClient.UpdateSequenceNumberAsync( + SequenceNumberAction.Increment, + conditions: conditions), + e => Assert.AreEqual($"{invalidCondition} is not applicable to this API.", e.Message)); + } + [RecordedTest] public async Task UpdateSequenceNumberAsync_AccessConditions() { diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json new file mode 100644 index 000000000000..83924c00aaba --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "346213427" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json new file mode 100644 index 000000000000..83924c00aaba --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "346213427" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json new file mode 100644 index 000000000000..6cbe6c410d05 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1723169146" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json new file mode 100644 index 000000000000..83924c00aaba --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThan%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "346213427" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json new file mode 100644 index 000000000000..173b0802b4b0 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "884857072" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json new file mode 100644 index 000000000000..83924c00aaba --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UpdateSequenceNumberAsync_InvalidRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "346213427" + } +} \ No newline at end of file From 08f3baae1d8747b87727ebe3c41718880cd3ac06 Mon Sep 17 00:00:00 2001 From: Sean McCullough Date: Fri, 18 Jun 2021 16:03:12 -0500 Subject: [PATCH 7/8] UploadPagesFromUri --- .../Azure.Storage.Blobs/src/PageBlobClient.cs | 13 ++++++ .../Azure.Storage.Blobs/tests/BlobTestBase.cs | 2 +- .../tests/PageBlobClientTests.cs | 45 +++++++++++++++++++ ...stConditions(%IfSequenceNumberEqual%).json | 6 +++ ...ditions(%IfSequenceNumberEqual%)Async.json | 6 +++ ...onditions(%IfSequenceNumberLessThan%).json | 6 +++ ...ions(%IfSequenceNumberLessThan%)Async.json | 6 +++ ...ns(%IfSequenceNumberLessThanOrEqual%).json | 6 +++ ...fSequenceNumberLessThanOrEqual%)Async.json | 6 +++ ...lidSourceRequestConditions(%LeaseId%).json | 6 +++ ...urceRequestConditions(%LeaseId%)Async.json | 6 +++ ...rceRequestConditions(%TagConditions%).json | 6 +++ ...questConditions(%TagConditions%)Async.json | 6 +++ 13 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberEqual%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThan%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThan%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThanOrEqual%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%LeaseId%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%LeaseId%)Async.json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%TagConditions%).json create mode 100644 sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%TagConditions%)Async.json diff --git a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs index ada1215b2638..d9f052ef136e 100644 --- a/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs +++ b/sdk/storage/Azure.Storage.Blobs/src/PageBlobClient.cs @@ -1256,6 +1256,9 @@ internal async Task> UploadPagesInternal( DiagnosticScope scope = ClientConfiguration.ClientDiagnostics.CreateScope($"{nameof(PageBlobClient)}.{nameof(UploadPages)}"); + // All PageBlobRequestConditions are valid. + conditions.ValidateConditionsNotPresent(BlobRequestConditionProperty.None); + try { scope.Start(); @@ -3342,6 +3345,16 @@ private async Task> UploadPagesFromUriInternal( DiagnosticScope scope = ClientConfiguration.ClientDiagnostics.CreateScope($"{nameof(PageBlobClient)}.{nameof(UploadPagesFromUri)}"); + // All destination PageBlobRequestConditions are valid. + conditions.ValidateConditionsNotPresent(BlobRequestConditionProperty.None); + + sourceConditions.ValidateConditionsNotPresent( + BlobRequestConditionProperty.LeaseId + | BlobRequestConditionProperty.IfSequenceNumberLessThanOrEqual + | BlobRequestConditionProperty.IfSequenceNumberLessThan + | BlobRequestConditionProperty.IfSequenceNumberEqual + | BlobRequestConditionProperty.TagConditions); + try { scope.Start(); diff --git a/sdk/storage/Azure.Storage.Blobs/tests/BlobTestBase.cs b/sdk/storage/Azure.Storage.Blobs/tests/BlobTestBase.cs index dbc7787534f8..5a96220d1dde 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/BlobTestBase.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/BlobTestBase.cs @@ -47,7 +47,7 @@ protected string SecondaryStorageTenantSecondaryHost() => new Uri(TestConfigSecondary.BlobServiceSecondaryEndpoint).Host; public BlobTestBase(bool async, BlobClientOptions.ServiceVersion serviceVersion, RecordedTestMode? mode = null) - : base(async, RecordedTestMode.Record) + : base(async, mode) { _serviceVersion = serviceVersion; } diff --git a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs index 50d16642e820..2562c34d4fc8 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs @@ -2695,6 +2695,51 @@ await destBlob.UploadPagesFromUriAsync( } } + [RecordedTest] + [TestCase(nameof(PageBlobRequestConditions.LeaseId))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberLessThan))] + [TestCase(nameof(PageBlobRequestConditions.IfSequenceNumberEqual))] + [TestCase(nameof(PageBlobRequestConditions.TagConditions))] + public async Task UploadPagesFromUriAsync_InvalidSourceRequestConditions(string invalidSourceCondition) + { + // Arrange + Uri uri = new Uri("https://www.doesntmatter.com"); + PageBlobClient pageBlobClient = new PageBlobClient(uri, GetOptions()); + + PageBlobRequestConditions sourceConditions = new PageBlobRequestConditions(); + + switch (invalidSourceCondition) + { + case nameof(PageBlobRequestConditions.LeaseId): + sourceConditions.LeaseId = "LeaseId"; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThanOrEqual): + sourceConditions.IfSequenceNumberLessThanOrEqual = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberLessThan): + sourceConditions.IfSequenceNumberLessThan = 0; + break; + case nameof(PageBlobRequestConditions.IfSequenceNumberEqual): + sourceConditions.IfSequenceNumberEqual = 0; + break; + case nameof(PageBlobRequestConditions.TagConditions): + sourceConditions.TagConditions = "TagConditions"; + break; + } + + HttpRange httpRange = new HttpRange(0, 1); + + // Act + await TestHelper.AssertExpectedExceptionAsync( + pageBlobClient.UploadPagesFromUriAsync( + uri, + httpRange, + httpRange, + sourceConditions: sourceConditions), + e => Assert.AreEqual($"{invalidSourceCondition} is not applicable to this API.", e.Message)); + } + [RecordedTest] public async Task UploadPagesFromUriAsync_CPK() { diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberEqual%).json new file mode 100644 index 000000000000..7f89986a65b1 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "454648522" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberEqual%)Async.json new file mode 100644 index 000000000000..f00e58c2e13d --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1644332487" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThan%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThan%).json new file mode 100644 index 000000000000..b291aef2627a --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThan%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "806020413" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThan%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThan%)Async.json new file mode 100644 index 000000000000..f00e58c2e13d --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThan%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1644332487" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThanOrEqual%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThanOrEqual%).json new file mode 100644 index 000000000000..b291aef2627a --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThanOrEqual%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "806020413" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json new file mode 100644 index 000000000000..7f9a8d0ad654 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%IfSequenceNumberLessThanOrEqual%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "873804559" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%LeaseId%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%LeaseId%).json new file mode 100644 index 000000000000..339cb2b297e2 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%LeaseId%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1112779775" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%LeaseId%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%LeaseId%)Async.json new file mode 100644 index 000000000000..7f9a8d0ad654 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%LeaseId%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "873804559" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%TagConditions%).json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%TagConditions%).json new file mode 100644 index 000000000000..2b98207a2a50 --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%TagConditions%).json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "1225176450" + } +} \ No newline at end of file diff --git a/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%TagConditions%)Async.json b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%TagConditions%)Async.json new file mode 100644 index 000000000000..0a140b11be4e --- /dev/null +++ b/sdk/storage/Azure.Storage.Blobs/tests/SessionRecords/PageBlobClientTests/UploadPagesFromUriAsync_InvalidSourceRequestConditions(%TagConditions%)Async.json @@ -0,0 +1,6 @@ +{ + "Entries": [], + "Variables": { + "RandomSeed": "267376768" + } +} \ No newline at end of file From 444151493043d592585ea9a2f926cebdbe3e5718 Mon Sep 17 00:00:00 2001 From: Sean McCullough Date: Fri, 18 Jun 2021 17:03:41 -0500 Subject: [PATCH 8/8] Hopefully fixed CI --- .../tests/PageBlobClientTests.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs index 2562c34d4fc8..0eb460a5784c 100644 --- a/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs +++ b/sdk/storage/Azure.Storage.Blobs/tests/PageBlobClientTests.cs @@ -604,7 +604,7 @@ await TestHelper.AssertExpectedExceptionAsync( } } - public IEnumerable UploadClearAsync_AccessConditions_Data + public IEnumerable UploadClearAsync_AccessConditions_Data(bool noSequenceNumberConditions) => new[] { new AccessConditionParameters(), @@ -613,16 +613,16 @@ public IEnumerable UploadClearAsync_AccessConditions_ new AccessConditionParameters { Match = ReceivedETag }, new AccessConditionParameters { NoneMatch = GarbageETag }, new AccessConditionParameters { LeaseId = ReceivedLeaseId }, - new AccessConditionParameters { SequenceNumberLT = 5 }, - new AccessConditionParameters { SequenceNumberLTE = 3 }, - new AccessConditionParameters { SequenceNumberEqual = 0 } + new AccessConditionParameters { SequenceNumberLT = noSequenceNumberConditions ? null : 5 }, + new AccessConditionParameters { SequenceNumberLTE = noSequenceNumberConditions? null : 3 }, + new AccessConditionParameters { SequenceNumberEqual = noSequenceNumberConditions ? null : 0 } }; [RecordedTest] public async Task UploadAsync_AccessConditions() { var garbageLeaseId = GetGarbageLeaseId(); - foreach (AccessConditionParameters parameters in UploadClearAsync_AccessConditions_Data) + foreach (AccessConditionParameters parameters in UploadClearAsync_AccessConditions_Data(noSequenceNumberConditions: false)) { await using DisposingContainer test = await GetTestContainerAsync(); @@ -1035,7 +1035,7 @@ await TestHelper.AssertExpectedExceptionAsync( public async Task ClearPagesAsync_AccessConditions() { var garbageLeaseId = GetGarbageLeaseId(); - foreach (AccessConditionParameters parameters in UploadClearAsync_AccessConditions_Data) + foreach (AccessConditionParameters parameters in UploadClearAsync_AccessConditions_Data(noSequenceNumberConditions: false)) { await using DisposingContainer test = await GetTestContainerAsync(); @@ -3690,7 +3690,7 @@ await TestHelper.AssertExpectedExceptionAsync( public async Task OpenWriteAsync_AccessConditions(bool overwrite) { var garbageLeaseId = GetGarbageLeaseId(); - foreach (AccessConditionParameters parameters in UploadClearAsync_AccessConditions_Data) + foreach (AccessConditionParameters parameters in UploadClearAsync_AccessConditions_Data(overwrite)) { // Arrange await using DisposingContainer test = await GetTestContainerAsync();