Skip to content

Commit de2d9c7

Browse files
committed
Additional testing
1 parent 04c08c7 commit de2d9c7

File tree

2 files changed

+82
-3
lines changed

2 files changed

+82
-3
lines changed

sdk/storage/Azure.Storage.Queues/tests/QueueSasBuilderTests.cs

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
// Licensed under the MIT License.
33

44
using System;
5+
using System.Security.Cryptography;
6+
using System.Text;
57
using System.Threading.Tasks;
68
using Azure.Core.TestFramework;
9+
using Azure.Storage.Queues.Models;
710
using Azure.Storage.Queues.Tests;
811
using Azure.Storage.Sas;
912
using Azure.Storage.Test;
@@ -21,6 +24,41 @@ public QueueSasBuilderTests(bool async, QueueClientOptions.ServiceVersion servic
2124
{
2225
}
2326

27+
[RecordedTest]
28+
public void QueueSasBuilder_ToSasQueryParameters_IdentitySas()
29+
{
30+
// Arrange
31+
var constants = TestConstants.Create(this);
32+
string queueName = GetNewQueueName();
33+
QueueSasBuilder queueSasBuilder = BuildQueueSasBuilder(constants, queueName);
34+
string signature = BuildUserDelegationSignature(constants, queueName);
35+
string stringToSign = null;
36+
37+
// Act
38+
QueueSasQueryParameters sasQueryParameters = queueSasBuilder.ToSasQueryParameters(GetUserDelegationKey(constants), constants.Sas.Account, out stringToSign);
39+
40+
// Assert
41+
Assert.AreEqual(SasQueryParametersInternals.DefaultSasVersionInternal, sasQueryParameters.Version);
42+
Assert.IsNull(sasQueryParameters.Services);
43+
Assert.IsNull(sasQueryParameters.ResourceTypes);
44+
Assert.AreEqual(constants.Sas.Protocol, sasQueryParameters.Protocol);
45+
Assert.AreEqual(constants.Sas.StartTime, sasQueryParameters.StartsOn);
46+
Assert.AreEqual(constants.Sas.ExpiryTime, sasQueryParameters.ExpiresOn);
47+
Assert.AreEqual(constants.Sas.IPRange, sasQueryParameters.IPRange);
48+
Assert.AreEqual(String.Empty, sasQueryParameters.Identifier);
49+
Assert.AreEqual(constants.Sas.KeyObjectId, sasQueryParameters.KeyObjectId);
50+
Assert.AreEqual(constants.Sas.KeyTenantId, sasQueryParameters.KeyTenantId);
51+
Assert.AreEqual(constants.Sas.KeyStart, sasQueryParameters.KeyStartsOn);
52+
Assert.AreEqual(constants.Sas.KeyExpiry, sasQueryParameters.KeyExpiresOn);
53+
Assert.AreEqual(constants.Sas.KeyService, sasQueryParameters.KeyService);
54+
Assert.AreEqual(constants.Sas.KeyVersion, sasQueryParameters.KeyVersion);
55+
Assert.AreEqual(Constants.Sas.Resource.Queue, sasQueryParameters.Resource);
56+
Assert.AreEqual(Permissions, sasQueryParameters.Permissions);
57+
Assert.AreEqual(constants.Sas.DelegatedObjectId, sasQueryParameters.DelegatedUserObjectId);
58+
Assert.AreEqual(signature, sasQueryParameters.Signature);
59+
Assert.IsNotNull(stringToSign);
60+
}
61+
2462
[RecordedTest]
2563
public void QueueSasBuilder_ToSasQueryParameters_VersionTest()
2664
{
@@ -285,6 +323,7 @@ private QueueSasBuilder BuildQueueSasBuilder(TestConstants constants, string que
285323
IPRange = constants.Sas.IPRange,
286324
Identifier = constants.Sas.Identifier,
287325
QueueName = queueName,
326+
DelegatedUserObjectId = constants.Sas.DelegatedObjectId,
288327
};
289328
queueSasBuilder.SetPermissions(Permissions);
290329

@@ -305,5 +344,45 @@ private string BuildSignature(TestConstants constants, string queueName)
305344

306345
return StorageSharedKeyCredentialInternals.ComputeSasSignature(constants.Sas.SharedKeyCredential, stringToSign);
307346
}
347+
348+
private string BuildUserDelegationSignature(TestConstants constants, string queueName)
349+
{
350+
var stringToSign = string.Join("\n",
351+
Permissions,
352+
SasExtensions.FormatTimesForSasSigning(constants.Sas.StartTime),
353+
SasExtensions.FormatTimesForSasSigning(constants.Sas.ExpiryTime),
354+
"/queue/" + constants.Sas.Account + "/" + queueName,
355+
constants.Sas.KeyObjectId,
356+
constants.Sas.KeyTenantId,
357+
SasExtensions.FormatTimesForSasSigning(constants.Sas.KeyStart),
358+
SasExtensions.FormatTimesForSasSigning(constants.Sas.KeyExpiry),
359+
constants.Sas.KeyService,
360+
constants.Sas.KeyVersion,
361+
null,
362+
constants.Sas.DelegatedObjectId,
363+
constants.Sas.IPRange.ToString(),
364+
SasExtensions.ToProtocolString(SasProtocol.Https),
365+
SasQueryParametersInternals.DefaultSasVersionInternal);
366+
367+
return ComputeHMACSHA256(constants.Sas.KeyValue, stringToSign);
368+
}
369+
370+
private string ComputeHMACSHA256(string userDelegationKeyValue, string message) =>
371+
Convert.ToBase64String(
372+
new HMACSHA256(
373+
Convert.FromBase64String(userDelegationKeyValue))
374+
.ComputeHash(Encoding.UTF8.GetBytes(message)));
375+
376+
private static UserDelegationKey GetUserDelegationKey(TestConstants constants)
377+
=> new UserDelegationKey
378+
{
379+
SignedObjectId = constants.Sas.KeyObjectId,
380+
SignedTenantId = constants.Sas.KeyTenantId,
381+
SignedStartsOn = constants.Sas.KeyStart,
382+
SignedExpiresOn = constants.Sas.KeyExpiry,
383+
SignedService = constants.Sas.KeyService,
384+
SignedVersion = constants.Sas.KeyVersion,
385+
Value = constants.Sas.KeyValue
386+
};
308387
}
309388
}

sdk/storage/Azure.Storage.Queues/tests/ServiceClientTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ await TestHelper.AssertExpectedExceptionAsync<RequestFailedException>(
301301
}
302302

303303
[RecordedTest]
304-
//[ServiceVersion(Min = QueueClientOptions.ServiceVersion.V2026_02_06)]
304+
[ServiceVersion(Min = QueueClientOptions.ServiceVersion.V2026_02_06)]
305305
public async Task GetUserDelegatioKey()
306306
{
307307
// Arrange
@@ -315,7 +315,7 @@ public async Task GetUserDelegatioKey()
315315
}
316316

317317
[RecordedTest]
318-
//[ServiceVersion(Min = QueueClientOptions.ServiceVersion.V2026_02_06)]
318+
[ServiceVersion(Min = QueueClientOptions.ServiceVersion.V2026_02_06)]
319319
public async Task GetUserDelegationKey_Error()
320320
{
321321
// Arrange
@@ -328,7 +328,7 @@ await TestHelper.AssertExpectedExceptionAsync<RequestFailedException>(
328328
}
329329

330330
[RecordedTest]
331-
//[ServiceVersion(Min = QueueClientOptions.ServiceVersion.V2026_02_06)]
331+
[ServiceVersion(Min = QueueClientOptions.ServiceVersion.V2026_02_06)]
332332
public async Task GetUserDelegationKey_ArgumentException()
333333
{
334334
// Arrange

0 commit comments

Comments
 (0)