Skip to content

Commit 6a11b9f

Browse files
authored
[Fix] Adding toLower to queue to fix the sync trigger call failure (Azure#52775)
* Adding queue lower casing * Adding test cases for the fix * Changing the test to have multiple cases. * Removing unnecesarry comments
1 parent 8b4829d commit 6a11b9f

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

sdk/storage/Microsoft.Azure.WebJobs.Extensions.Storage.Queues/src/Listeners/QueueScalerProvider.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,21 @@ public void ResolveProperties(INameResolver resolver)
8787
{
8888
QueueName = resolver.ResolveWholeString(QueueName);
8989
}
90+
// Always normalize after token resolution
91+
NormalizeQueueName();
92+
}
93+
94+
/// <summary>
95+
/// Coerces the resolved queue name to lowercase.
96+
/// Azure Queue Storage requires lowercase names; normalization here also
97+
/// ensures consistent hashing/identity when used by scaling components.
98+
/// </summary>
99+
private void NormalizeQueueName()
100+
{
101+
if (!string.IsNullOrEmpty(QueueName))
102+
{
103+
QueueName = QueueName.ToLowerInvariant(); // must be lowercase. coerce here to be nice.
104+
}
90105
}
91106
}
92107
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
using System;
5+
using Microsoft.Azure.WebJobs;
6+
using Microsoft.Azure.WebJobs.Extensions.Storage.Queues.Listeners;
7+
using NUnit.Framework;
8+
9+
namespace Microsoft.Azure.WebJobs.Extensions.Storage.Queues.Tests
10+
{
11+
[TestFixture]
12+
public class QueueScalerProviderTests
13+
{
14+
[TestCase("%MY_QUEUE%", "mixedcasequeuename", TestName = "TokenResolvedAndLowercased")]
15+
[TestCase("MixedCaseQueueName", "mixedcasequeuename", TestName = "DirectMixedCaseLowercased")]
16+
[TestCase("alreadylowercase", "alreadylowercase", TestName = "AlreadyLowercaseUnchanged")]
17+
[TestCase("", "", TestName = "EmptyStringRemainsEmpty")]
18+
[TestCase(null, null, TestName = "NullRemainsNull")]
19+
public void ResolveProperties_LowercasesQueueName(string queueName, string expectedOutput)
20+
{
21+
var metadata = new QueueScalerProvider.QueueMetadata
22+
{
23+
Connection = "AnyConnection",
24+
QueueName = queueName
25+
};
26+
var resolver = new TestNameResolver();
27+
28+
// Act
29+
metadata.ResolveProperties(resolver);
30+
31+
// Assert
32+
Assert.AreEqual(expectedOutput, metadata.QueueName);
33+
}
34+
35+
private class TestNameResolver : INameResolver
36+
{
37+
public string Resolve(string name)
38+
{
39+
if (string.Equals(name, "MY_QUEUE", StringComparison.OrdinalIgnoreCase))
40+
{
41+
return "MixedCaseQueueName"; // will be lowercased by ResolveProperties
42+
}
43+
return null;
44+
}
45+
}
46+
}
47+
}

0 commit comments

Comments
 (0)