Skip to content

Commit 3619f17

Browse files
authored
Merge pull request #4412 from Particular/john/slashes2
Ensuring Azure ManagementUrl setting accepts urls without the last slash
2 parents 7c8b659 + 50e67b9 commit 3619f17

File tree

3 files changed

+40
-12
lines changed

3 files changed

+40
-12
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Connection test to AzureServiceBus was successful
2+
3+
Connection settings used:
4+
ServiceBus name not set, defaulted to "xxxxx"
5+
SubscriptionId set
6+
TenantId set
7+
ClientId set
8+
Client secret set
9+
Management Url set to "https://management.azure.com"

src/ServiceControl.Transports.ASBS.Tests/AzureQueryTests.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace ServiceControl.Transport.Tests;
1414
using Particular.Approvals;
1515
using Transports;
1616
using Transports.ASBS;
17-
using ServiceControl.Transports.BrokerThroughput;
17+
using Transports.BrokerThroughput;
1818

1919
[TestFixture]
2020
class AzureQueryTests : TransportTestFixture
@@ -81,6 +81,28 @@ public async Task TestConnectionWithValidSettings()
8181
});
8282
}
8383

84+
[Test]
85+
public async Task TestConnectionWithMissingLastSlashInManagementUrl()
86+
{
87+
using var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(30));
88+
89+
string serviceBusName = query.ExtractServiceBusName();
90+
Dictionary<string, string> dictionary = GetSettings();
91+
dictionary[AzureQuery.AzureServiceBusSettings.ManagementUrl] = "https://management.azure.com";
92+
query.Initialize(new ReadOnlyDictionary<string, string>(dictionary));
93+
(bool success, _, string diagnostics) = await query.TestConnection(cancellationTokenSource.Token);
94+
95+
Assert.That(success, Is.True);
96+
Approver.Verify(diagnostics, s =>
97+
{
98+
s = s.Replace(dictionary[AzureQuery.AzureServiceBusSettings.TenantId], "xxxxx");
99+
s = s.Replace(dictionary[AzureQuery.AzureServiceBusSettings.SubscriptionId], "xxxxx");
100+
s = s.Replace(dictionary[AzureQuery.AzureServiceBusSettings.ClientId], "xxxxx");
101+
s = s.Replace(serviceBusName, "xxxxx");
102+
return s;
103+
});
104+
}
105+
84106
[Test]
85107
public async Task TestConnectionWithInvalidTenantIdSetting()
86108
{

src/ServiceControl.Transports.ASBS/AzureQuery.cs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ namespace ServiceControl.Transports.ASBS;
1717
using Azure.ResourceManager;
1818
using Azure.ResourceManager.Resources;
1919
using Azure.ResourceManager.ServiceBus;
20+
using BrokerThroughput;
2021
using Microsoft.Extensions.Logging;
21-
using ServiceControl.Transports.BrokerThroughput;
2222

2323
public class AzureQuery(ILogger<AzureQuery> logger, TimeProvider timeProvider, TransportSettings transportSettings)
2424
: BrokerThroughputQuery(logger, "AzureServiceBus")
@@ -33,9 +33,10 @@ protected override void InitializeCore(ReadOnlyDictionary<string, string> settin
3333
ConnectionSettings? connectionSettings = ConnectionStringParser.Parse(transportSettings.ConnectionString);
3434
bool usingManagedIdentity =
3535
connectionSettings.AuthenticationMethod is TokenCredentialAuthentication;
36+
Uri? managementUrlParsed = null;
3637
if (settings.TryGetValue(AzureServiceBusSettings.ManagementUrl, out string? managementUrl))
3738
{
38-
if (!Uri.TryCreate(managementUrl, UriKind.Absolute, out _))
39+
if (!Uri.TryCreate(managementUrl, UriKind.Absolute, out managementUrlParsed))
3940
{
4041
InitialiseErrors.Add("Management url configuration is invalid");
4142
}
@@ -149,31 +150,27 @@ protected override void InitializeCore(ReadOnlyDictionary<string, string> settin
149150

150151
ArmEnvironment GetEnvironment()
151152
{
152-
if (managementUrl == null)
153+
if (managementUrlParsed == null)
153154
{
154155
return ArmEnvironment.AzurePublicCloud;
155156
}
156157

157-
if (managementUrl.Equals(ArmEnvironment.AzurePublicCloud.Endpoint.ToString(),
158-
StringComparison.CurrentCultureIgnoreCase))
158+
if (managementUrlParsed == ArmEnvironment.AzurePublicCloud.Endpoint)
159159
{
160160
return ArmEnvironment.AzurePublicCloud;
161161
}
162162

163-
if (managementUrl.Equals(ArmEnvironment.AzureChina.Endpoint.ToString(),
164-
StringComparison.CurrentCultureIgnoreCase))
163+
if (managementUrlParsed == ArmEnvironment.AzureChina.Endpoint)
165164
{
166165
return ArmEnvironment.AzureChina;
167166
}
168167

169-
if (managementUrl.Equals(ArmEnvironment.AzureGermany.Endpoint.ToString(),
170-
StringComparison.CurrentCultureIgnoreCase))
168+
if (managementUrlParsed == ArmEnvironment.AzureGermany.Endpoint)
171169
{
172170
return ArmEnvironment.AzureGermany;
173171
}
174172

175-
if (managementUrl.Equals(ArmEnvironment.AzureGovernment.Endpoint.ToString(),
176-
StringComparison.CurrentCultureIgnoreCase))
173+
if (managementUrlParsed == ArmEnvironment.AzureGovernment.Endpoint)
177174
{
178175
return ArmEnvironment.AzureGovernment;
179176
}

0 commit comments

Comments
 (0)