Skip to content

Commit 94756bc

Browse files
Merge branch 'dotnet:main' into main
2 parents 83b87d7 + 101189b commit 94756bc

File tree

25 files changed

+641
-37
lines changed

25 files changed

+641
-37
lines changed

.config/dotnet-tools.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
]
1616
},
1717
"PowerShell": {
18-
"version": "7.4.1",
18+
"version": "7.4.2",
1919
"commands": [
2020
"pwsh"
2121
]
2222
}
2323
}
24-
}
24+
}

Directory.Packages.props

+8-8
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,19 @@
1919
<PackageVersion Include="OpenTelemetry.Instrumentation.AWS" Version="1.1.0-beta.3" />
2020
<PackageVersion Include="OpenTelemetry.Extensions.AWS" Version="1.3.0-beta.1" />
2121
<!-- Azure SDK for .NET dependencies -->
22-
<PackageVersion Include="Azure.AI.OpenAI" Version="1.0.0-beta.15" />
22+
<PackageVersion Include="Azure.AI.OpenAI" Version="1.0.0-beta.16" />
2323
<PackageVersion Include="Azure.Data.Tables" Version="12.8.3" />
2424
<PackageVersion Include="Azure.Extensions.AspNetCore.Configuration.Secrets" Version="1.3.1" />
2525
<PackageVersion Include="Microsoft.Azure.AppConfiguration.AspNetCore" Version="7.1.0" />
26-
<PackageVersion Include="Azure.Identity" Version="1.11.0" />
26+
<PackageVersion Include="Azure.Identity" Version="1.11.2" />
2727
<PackageVersion Include="Azure.Search.Documents" Version="11.5.1" />
2828
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.17.5" />
2929
<PackageVersion Include="Azure.Security.KeyVault.Secrets" Version="4.6.0" />
3030
<PackageVersion Include="Azure.Storage.Blobs" Version="12.19.1" />
3131
<PackageVersion Include="Azure.Storage.Queues" Version="12.17.1" />
32-
<PackageVersion Include="Microsoft.Azure.Cosmos" Version="3.38.1" />
33-
<PackageVersion Include="Microsoft.Azure.SignalR" Version="1.25.1" />
34-
<PackageVersion Include="Microsoft.Extensions.Azure" Version="1.7.2" />
32+
<PackageVersion Include="Microsoft.Azure.Cosmos" Version="3.39.1" />
33+
<PackageVersion Include="Microsoft.Azure.SignalR" Version="1.25.2" />
34+
<PackageVersion Include="Microsoft.Extensions.Azure" Version="1.7.3" />
3535
<!-- Azure Management SDK for .NET dependencies -->
3636
<PackageVersion Include="Azure.Provisioning" Version="0.2.0-beta.2" />
3737
<PackageVersion Include="Azure.Provisioning.AppConfiguration" Version="0.1.0-beta.1" />
@@ -98,8 +98,8 @@
9898
<PackageVersion Include="Humanizer.Core" Version="2.14.1" />
9999
<PackageVersion Include="KubernetesClient" Version="13.0.26" />
100100
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.2.0" />
101-
<PackageVersion Include="Microsoft.FluentUI.AspNetCore.Components" Version="4.6.1" />
102-
<PackageVersion Include="Microsoft.FluentUI.AspNetCore.Components.Icons" Version="4.6.1" />
101+
<PackageVersion Include="Microsoft.FluentUI.AspNetCore.Components" Version="4.7.1" />
102+
<PackageVersion Include="Microsoft.FluentUI.AspNetCore.Components.Icons" Version="4.7.0" />
103103
<PackageVersion Include="MongoDB.Driver" Version="2.24.0" />
104104
<PackageVersion Include="MongoDB.Driver.Core.Extensions.DiagnosticSources" Version="1.4.0" />
105105
<PackageVersion Include="MySqlConnector.DependencyInjection" Version="2.3.6" />
@@ -133,7 +133,7 @@
133133
<PackageVersion Include="Microsoft.DotNet.Build.Tasks.Workloads" Version="8.0.0-beta.23564.4" />
134134
<PackageVersion Include="Microsoft.Signed.Wix" Version="1.0.0-v3.14.0.5722" />
135135
<PackageVersion Include="Microsoft.DotNet.Build.Tasks.Installers" Version="8.0.0-beta.23564.4" />
136-
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.24201.1" />
136+
<PackageVersion Include="System.CommandLine" Version="2.0.0-beta4.24209.3" />
137137
<!-- unit test dependencies -->
138138
<PackageVersion Include="bUnit" Version="1.27.17" />
139139
<PackageVersion Include="JsonSchema.Net" Version="6.0.7" />

src/Shared/Cosmos/CosmosConstants.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ namespace Aspire.Hosting.Azure.Cosmos;
66
internal static class CosmosConstants
77
{
88
/// <summary>
9-
/// Defines the application name used to interact with the aszure cosmos db. This will be suffixed to the
10-
/// cosmos user-agent to include with every Azure Cosmos DB service interaction.
9+
/// Defines the application name used to interact with the Azure Cosmos database. This will be suffixed to the
10+
/// Cosmos user-agent to include with every Azure Cosmos database service interaction.
1111
/// </summary>
1212
internal const string CosmosApplicationName = "Aspire";
1313

tests/Aspire.Azure.AI.OpenAI.Tests/AspireAzureAIOpenAIExtensionsTests.cs

+25
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,29 @@ public void ReadsFromConnectionStringsFormats(string connectionString)
8686
Assert.NotNull(client);
8787
}
8888

89+
[Fact]
90+
public void CanAddMultipleKeyedServices()
91+
{
92+
var builder = Host.CreateEmptyApplicationBuilder(null);
93+
builder.Configuration.AddInMemoryCollection([
94+
new KeyValuePair<string, string?>("ConnectionStrings:openai1", ConnectionString),
95+
new KeyValuePair<string, string?>("ConnectionStrings:openai2", ConnectionString + "2"),
96+
new KeyValuePair<string, string?>("ConnectionStrings:openai3", ConnectionString + "3")
97+
]);
98+
99+
builder.AddAzureOpenAIClient("openai1");
100+
builder.AddKeyedAzureOpenAIClient("openai2");
101+
builder.AddKeyedAzureOpenAIClient("openai3");
102+
103+
using var host = builder.Build();
104+
105+
// Unkeyed services don't work with keyed services. See https://github.com/dotnet/aspire/issues/3890
106+
//var client1 = host.Services.GetRequiredService<OpenAIClient>();
107+
var client2 = host.Services.GetRequiredKeyedService<OpenAIClient>("openai2");
108+
var client3 = host.Services.GetRequiredKeyedService<OpenAIClient>("openai3");
109+
110+
//Assert.NotSame(client1, client2);
111+
//Assert.NotSame(client1, client3);
112+
Assert.NotSame(client2, client3);
113+
}
89114
}

tests/Aspire.Azure.Data.Tables.Tests/AspireTablesExtensionsTests.cs

+30
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,34 @@ public void ServiceUriWorksInConnectionStrings(bool useKeyed)
124124

125125
Assert.Equal("aspirestoragetests", client.AccountName);
126126
}
127+
128+
[Fact]
129+
public void CanAddMultipleKeyedServices()
130+
{
131+
var builder = Host.CreateEmptyApplicationBuilder(null);
132+
builder.Configuration.AddInMemoryCollection([
133+
new KeyValuePair<string, string?>("ConnectionStrings:tables1", ConnectionString),
134+
new KeyValuePair<string, string?>("ConnectionStrings:tables2", "AccountName=account2;AccountKey=fake"),
135+
new KeyValuePair<string, string?>("ConnectionStrings:tables3", "AccountName=account3;AccountKey=fake")
136+
]);
137+
138+
builder.AddAzureTableClient("tables1");
139+
builder.AddKeyedAzureTableClient("tables2");
140+
builder.AddKeyedAzureTableClient("tables3");
141+
142+
using var host = builder.Build();
143+
144+
// Unkeyed services don't work with keyed services. See https://github.com/dotnet/aspire/issues/3890
145+
//var client1 = host.Services.GetRequiredService<TableServiceClient>();
146+
var client2 = host.Services.GetRequiredKeyedService<TableServiceClient>("tables2");
147+
var client3 = host.Services.GetRequiredKeyedService<TableServiceClient>("tables3");
148+
149+
//Assert.NotSame(client1, client2);
150+
//Assert.NotSame(client1, client3);
151+
Assert.NotSame(client2, client3);
152+
153+
//Assert.Equal("aspirestoragetests", client1.AccountName);
154+
Assert.Equal("account2", client2.AccountName);
155+
Assert.Equal("account3", client3.AccountName);
156+
}
127157
}

tests/Aspire.Azure.Messaging.EventHubs.Tests/AspireEventHubsExtensionsTests.cs

+51-7
Original file line numberDiff line numberDiff line change
@@ -247,23 +247,23 @@ public void ConnectionNameWinsOverConfigSection(bool useKeyed, int clientIndex)
247247

248248
private static void RetrieveAndAssert(bool useKeyed, int clientIndex, IHost host)
249249
{
250-
var client = RetrieveClient(useKeyed, clientIndex, host);
250+
var client = RetrieveClient(useKeyed ? "eh" : null, clientIndex, host);
251251

252-
AssertFullyQualifiedNamespace(client);
252+
AssertFullyQualifiedNamespace(FullyQualifiedNamespace, client);
253253
}
254254

255-
private static object RetrieveClient(bool useKeyed, int clientIndex, IHost host)
255+
private static object RetrieveClient(object? key, int clientIndex, IHost host)
256256
{
257-
var client = useKeyed ?
258-
host.Services.GetRequiredKeyedService(s_clientTypes[clientIndex], "eh") :
257+
var client = key is not null ?
258+
host.Services.GetRequiredKeyedService(s_clientTypes[clientIndex], key) :
259259
host.Services.GetRequiredService(s_clientTypes[clientIndex]);
260260

261261
return client;
262262
}
263263

264-
private static void AssertFullyQualifiedNamespace(object client)
264+
private static void AssertFullyQualifiedNamespace(string expectedNamespace, object client)
265265
{
266-
Assert.Equal(FullyQualifiedNamespace, client switch
266+
Assert.Equal(expectedNamespace, client switch
267267
{
268268
EventHubProducerClient producer => producer.FullyQualifiedNamespace,
269269
EventHubConsumerClient consumer => consumer.FullyQualifiedNamespace,
@@ -324,6 +324,50 @@ public void NamespaceWorksInConnectionStrings(bool useKeyed, int clientIndex)
324324
RetrieveAndAssert(useKeyed, clientIndex, host);
325325
}
326326

327+
[Theory]
328+
[InlineData(EventHubProducerClientIndex)]
329+
[InlineData(EventHubConsumerClientIndex)]
330+
[InlineData(EventProcessorClientIndex)]
331+
[InlineData(PartitionReceiverIndex)]
332+
public void CanAddMultipleKeyedServices(int clientIndex)
333+
{
334+
var builder = Host.CreateEmptyApplicationBuilder(null);
335+
builder.Configuration.AddInMemoryCollection([
336+
new KeyValuePair<string, string?>("ConnectionStrings:eh1", EhConnectionString),
337+
new KeyValuePair<string, string?>($"Aspire:Azure:Messaging:EventHubs:{s_clientTypes[clientIndex].Name}:BlobContainerName", "checkpoints"),
338+
new KeyValuePair<string, string?>($"Aspire:Azure:Messaging:EventHubs:{s_clientTypes[clientIndex].Name}:PartitionId", "foo"),
339+
340+
new KeyValuePair<string, string?>("ConnectionStrings:eh2", EhConnectionString.Replace("aspireeventhubstests", "aspireeventhubstests2")),
341+
new KeyValuePair<string, string?>($"Aspire:Azure:Messaging:EventHubs:{s_clientTypes[clientIndex].Name}:eh2:BlobContainerName", "checkpoints"),
342+
new KeyValuePair<string, string?>($"Aspire:Azure:Messaging:EventHubs:{s_clientTypes[clientIndex].Name}:eh2:PartitionId", "foo"),
343+
344+
new KeyValuePair<string, string?>("ConnectionStrings:eh3", EhConnectionString.Replace("aspireeventhubstests", "aspireeventhubstests3")),
345+
new KeyValuePair<string, string?>($"Aspire:Azure:Messaging:EventHubs:{s_clientTypes[clientIndex].Name}:eh3:BlobContainerName", "checkpoints"),
346+
new KeyValuePair<string, string?>($"Aspire:Azure:Messaging:EventHubs:{s_clientTypes[clientIndex].Name}:eh3:PartitionId", "foo"),
347+
]);
348+
349+
ConfigureBlobServiceClient(useKeyed: false, builder.Services);
350+
351+
s_clientAdders[clientIndex](builder, "eh1", null);
352+
s_keyedClientAdders[clientIndex](builder, "eh2", null);
353+
s_keyedClientAdders[clientIndex](builder, "eh3", null);
354+
355+
using var host = builder.Build();
356+
357+
// Unkeyed services don't work with keyed services. See https://github.com/dotnet/aspire/issues/3890
358+
//var client1 = RetrieveClient(key: null, clientIndex, host);
359+
var client2 = RetrieveClient(key: "eh2", clientIndex, host);
360+
var client3 = RetrieveClient(key: "eh3", clientIndex, host);
361+
362+
//Assert.NotSame(client1, client2);
363+
//Assert.NotSame(client1, client3);
364+
Assert.NotSame(client2, client3);
365+
366+
//AssertFullyQualifiedNamespace("aspireeventhubstests.servicebus.windows.net", client1);
367+
AssertFullyQualifiedNamespace("aspireeventhubstests2.servicebus.windows.net", client2);
368+
AssertFullyQualifiedNamespace("aspireeventhubstests3.servicebus.windows.net", client3);
369+
}
370+
327371
public static string CreateConfigKey(string prefix, string? key, string suffix)
328372
=> string.IsNullOrEmpty(key) ? $"{prefix}:{suffix}" : $"{prefix}:{key}:{suffix}";
329373
}

tests/Aspire.Azure.Messaging.ServiceBus.Tests/AspireServiceBusExtensionsTests.cs

+30
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,34 @@ public void NamespaceWorksInConnectionStrings(bool useKeyed)
124124

125125
Assert.Equal(ConformanceTests.FullyQualifiedNamespace, client.FullyQualifiedNamespace);
126126
}
127+
128+
[Fact]
129+
public void CanAddMultipleKeyedServices()
130+
{
131+
var builder = Host.CreateEmptyApplicationBuilder(null);
132+
builder.Configuration.AddInMemoryCollection([
133+
new KeyValuePair<string, string?>("ConnectionStrings:sb1", ConnectionString),
134+
new KeyValuePair<string, string?>("ConnectionStrings:sb2", "Endpoint=sb://aspireservicebustests2.servicebus.windows.net/;SharedAccessKeyName=fake;SharedAccessKey=fake"),
135+
new KeyValuePair<string, string?>("ConnectionStrings:sb3", "Endpoint=sb://aspireservicebustests3.servicebus.windows.net/;SharedAccessKeyName=fake;SharedAccessKey=fake")
136+
]);
137+
138+
builder.AddAzureServiceBusClient("sb1");
139+
builder.AddKeyedAzureServiceBusClient("sb2");
140+
builder.AddKeyedAzureServiceBusClient("sb3");
141+
142+
using var host = builder.Build();
143+
144+
// Unkeyed services don't work with keyed services. See https://github.com/dotnet/aspire/issues/3890
145+
//var client1 = host.Services.GetRequiredService<ServiceBusClient>();
146+
var client2 = host.Services.GetRequiredKeyedService<ServiceBusClient>("sb2");
147+
var client3 = host.Services.GetRequiredKeyedService<ServiceBusClient>("sb3");
148+
149+
//Assert.NotSame(client1, client2);
150+
//Assert.NotSame(client1, client3);
151+
Assert.NotSame(client2, client3);
152+
153+
//Assert.Equal(ConformanceTests.FullyQualifiedNamespace, client1.FullyQualifiedNamespace);
154+
Assert.Equal("aspireservicebustests2.servicebus.windows.net", client2.FullyQualifiedNamespace);
155+
Assert.Equal("aspireservicebustests3.servicebus.windows.net", client3.FullyQualifiedNamespace);
156+
}
127157
}

tests/Aspire.Azure.Search.Documents.Tests/AspireAzureSearchExtensionsTests.cs

+30
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,34 @@ public void ConnectionStringCanBeSetInCode(bool useKeyed)
6868
Assert.NotNull(client);
6969
Assert.Equal(new Uri(SearchEndpoint), client.Endpoint);
7070
}
71+
72+
[Fact]
73+
public void CanAddMultipleKeyedServices()
74+
{
75+
var builder = Host.CreateEmptyApplicationBuilder(null);
76+
builder.Configuration.AddInMemoryCollection([
77+
new KeyValuePair<string, string?>("ConnectionStrings:search1", ConnectionString),
78+
new KeyValuePair<string, string?>("ConnectionStrings:search2", "Endpoint=https://aspireazuresearchtests2.search.windows.net/;Key=fake"),
79+
new KeyValuePair<string, string?>("ConnectionStrings:search3", "Endpoint=https://aspireazuresearchtests3.search.windows.net/;Key=fake")
80+
]);
81+
82+
builder.AddAzureSearchClient("search1");
83+
builder.AddKeyedAzureSearchClient("search2");
84+
builder.AddKeyedAzureSearchClient("search3");
85+
86+
using var host = builder.Build();
87+
88+
// Unkeyed services don't work with keyed services. See https://github.com/dotnet/aspire/issues/3890
89+
//var client1 = host.Services.GetRequiredService<SearchIndexClient>();
90+
var client2 = host.Services.GetRequiredKeyedService<SearchIndexClient>("search2");
91+
var client3 = host.Services.GetRequiredKeyedService<SearchIndexClient>("search3");
92+
93+
//Assert.NotSame(client1, client2);
94+
//Assert.NotSame(client1, client3);
95+
Assert.NotSame(client2, client3);
96+
97+
//Assert.Equal(new Uri(SearchEndpoint), client1.Endpoint);
98+
Assert.Equal(new Uri("https://aspireazuresearchtests2.search.windows.net/"), client2.Endpoint);
99+
Assert.Equal(new Uri("https://aspireazuresearchtests3.search.windows.net/"), client3.Endpoint);
100+
}
71101
}

tests/Aspire.Azure.Security.KeyVault.Tests/AspireKeyVaultExtensionsTests.cs

+30
Original file line numberDiff line numberDiff line change
@@ -171,4 +171,34 @@ private static MockResponse CreateResponse(string content)
171171

172172
return response;
173173
}
174+
175+
[Fact]
176+
public void CanAddMultipleKeyedServices()
177+
{
178+
var builder = Host.CreateEmptyApplicationBuilder(null);
179+
builder.Configuration.AddInMemoryCollection([
180+
new KeyValuePair<string, string?>("ConnectionStrings:secrets1", ConformanceTests.VaultUri),
181+
new KeyValuePair<string, string?>("ConnectionStrings:secrets2", "https://aspiretests2.vault.azure.net/"),
182+
new KeyValuePair<string, string?>("ConnectionStrings:secrets3", "https://aspiretests3.vault.azure.net/")
183+
]);
184+
185+
builder.AddAzureKeyVaultClient("secrets1");
186+
builder.AddKeyedAzureKeyVaultClient("secrets2");
187+
builder.AddKeyedAzureKeyVaultClient("secrets3");
188+
189+
using var host = builder.Build();
190+
191+
// Unkeyed services don't work with keyed services. See https://github.com/dotnet/aspire/issues/3890
192+
//var client1 = host.Services.GetRequiredService<SecretClient>();
193+
var client2 = host.Services.GetRequiredKeyedService<SecretClient>("secrets2");
194+
var client3 = host.Services.GetRequiredKeyedService<SecretClient>("secrets3");
195+
196+
//Assert.NotSame(client1, client2);
197+
//Assert.NotSame(client1, client3);
198+
Assert.NotSame(client2, client3);
199+
200+
//Assert.Equal(new Uri(ConformanceTests.VaultUri), client1.VaultUri);
201+
Assert.Equal(new Uri("https://aspiretests2.vault.azure.net/"), client2.VaultUri);
202+
Assert.Equal(new Uri("https://aspiretests3.vault.azure.net/"), client3.VaultUri);
203+
}
174204
}

tests/Aspire.Azure.Storage.Blobs.Tests/AspireBlobStorageExtensionsTests.cs

+30
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,34 @@ public void ServiceUriWorksInConnectionStrings(bool useKeyed)
124124

125125
Assert.Equal("aspirestoragetests", client.AccountName);
126126
}
127+
128+
[Fact]
129+
public void CanAddMultipleKeyedServices()
130+
{
131+
var builder = Host.CreateEmptyApplicationBuilder(null);
132+
builder.Configuration.AddInMemoryCollection([
133+
new KeyValuePair<string, string?>("ConnectionStrings:blob1", ConformanceTests.ServiceUri),
134+
new KeyValuePair<string, string?>("ConnectionStrings:blob2", "https://aspirestoragetests2.blob.core.windows.net/"),
135+
new KeyValuePair<string, string?>("ConnectionStrings:blob3", "https://aspirestoragetests3.blob.core.windows.net/")
136+
]);
137+
138+
builder.AddAzureBlobClient("blob1");
139+
builder.AddKeyedAzureBlobClient("blob2");
140+
builder.AddKeyedAzureBlobClient("blob3");
141+
142+
using var host = builder.Build();
143+
144+
// Unkeyed services don't work with keyed services. See https://github.com/dotnet/aspire/issues/3890
145+
//var client1 = host.Services.GetRequiredService<BlobServiceClient>();
146+
var client2 = host.Services.GetRequiredKeyedService<BlobServiceClient>("blob2");
147+
var client3 = host.Services.GetRequiredKeyedService<BlobServiceClient>("blob3");
148+
149+
//Assert.NotSame(client1, client2);
150+
//Assert.NotSame(client1, client3);
151+
Assert.NotSame(client2, client3);
152+
153+
//Assert.Equal("aspirestoragetests", client1.AccountName);
154+
Assert.Equal("aspirestoragetests2", client2.AccountName);
155+
Assert.Equal("aspirestoragetests3", client3.AccountName);
156+
}
127157
}

tests/Aspire.Azure.Storage.Queues.Tests/AspireQueueStorageExtensionsTests.cs

+30
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,34 @@ public void ServiceUriWorksInConnectionStrings(bool useKeyed)
124124

125125
Assert.Equal("aspirestoragetests", client.AccountName);
126126
}
127+
128+
[Fact]
129+
public void CanAddMultipleKeyedServices()
130+
{
131+
var builder = Host.CreateEmptyApplicationBuilder(null);
132+
builder.Configuration.AddInMemoryCollection([
133+
new KeyValuePair<string, string?>("ConnectionStrings:queue1", ConformanceTests.ServiceUri),
134+
new KeyValuePair<string, string?>("ConnectionStrings:queue2", "https://aspirestoragetests2.queue.core.windows.net"),
135+
new KeyValuePair<string, string?>("ConnectionStrings:queue3", "https://aspirestoragetests3.queue.core.windows.net")
136+
]);
137+
138+
builder.AddAzureQueueClient("queue1");
139+
builder.AddKeyedAzureQueueClient("queue2");
140+
builder.AddKeyedAzureQueueClient("queue3");
141+
142+
using var host = builder.Build();
143+
144+
// Unkeyed services don't work with keyed services. See https://github.com/dotnet/aspire/issues/3890
145+
//var client1 = host.Services.GetRequiredService<QueueServiceClient>();
146+
var client2 = host.Services.GetRequiredKeyedService<QueueServiceClient>("queue2");
147+
var client3 = host.Services.GetRequiredKeyedService<QueueServiceClient>("queue3");
148+
149+
//Assert.NotSame(client1, client2);
150+
//Assert.NotSame(client1, client3);
151+
Assert.NotSame(client2, client3);
152+
153+
//Assert.Equal("aspirestoragetests", client1.AccountName);
154+
Assert.Equal("aspirestoragetests2", client2.AccountName);
155+
Assert.Equal("aspirestoragetests3", client3.AccountName);
156+
}
127157
}

0 commit comments

Comments
 (0)