From 0a3cf7b4dca72ad2404096a90b0ccaf6db65472f Mon Sep 17 00:00:00 2001 From: Mackinnon Buck Date: Thu, 10 Apr 2025 12:45:20 -0700 Subject: [PATCH 1/8] Update Aspire version --- Directory.Build.props | 2 +- .../JavaAppHostingExtension.Executable.cs | 20 ++++++++++--------- .../OllamaResourceBuilderExtensions.Model.cs | 20 +++++++++---------- .../SqlProjectBuilderExtensions.cs | 13 +++++++----- .../AddBunAppTests.cs | 3 ++- .../AddNgrokTests.cs | 9 ++++++--- 6 files changed, 37 insertions(+), 30 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 55bbaaf06..22eb2b09c 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,7 @@ enable 9 - $(AspireMajorVersion).1.0 + $(AspireMajorVersion).2.0 $(AspireVersion) 9.0.0 9.0.3 diff --git a/src/CommunityToolkit.Aspire.Hosting.Java/JavaAppHostingExtension.Executable.cs b/src/CommunityToolkit.Aspire.Hosting.Java/JavaAppHostingExtension.Executable.cs index c0e97d319..3e2c34688 100644 --- a/src/CommunityToolkit.Aspire.Hosting.Java/JavaAppHostingExtension.Executable.cs +++ b/src/CommunityToolkit.Aspire.Hosting.Java/JavaAppHostingExtension.Executable.cs @@ -107,16 +107,18 @@ public static IResourceBuilder WithMavenBuild( await BuildWithMaven(builder.Resource, context.ServiceProvider, context.CancellationToken, false).ConfigureAwait(false) ? new ExecuteCommandResult { Success = true } : new ExecuteCommandResult { Success = false, ErrorMessage = "Failed to build with Maven" }, - (context) => context.ResourceSnapshot.State switch + new CommandOptions() { - { Text: "Stopped" } or - { Text: "Exited" } or - { Text: "Finished" } or - { Text: "FailedToStart" } => ResourceCommandState.Enabled, - _ => ResourceCommandState.Disabled - }, - iconName: "build" - ); + IconName = "build", + UpdateState = (context) => context.ResourceSnapshot.State switch + { + { Text: "Stopped" } or + { Text: "Exited" } or + { Text: "Finished" } or + { Text: "FailedToStart" } => ResourceCommandState.Enabled, + _ => ResourceCommandState.Disabled + }, + }); return builder; diff --git a/src/CommunityToolkit.Aspire.Hosting.Ollama/OllamaResourceBuilderExtensions.Model.cs b/src/CommunityToolkit.Aspire.Hosting.Ollama/OllamaResourceBuilderExtensions.Model.cs index 83c7492e9..723aa532b 100644 --- a/src/CommunityToolkit.Aspire.Hosting.Ollama/OllamaResourceBuilderExtensions.Model.cs +++ b/src/CommunityToolkit.Aspire.Hosting.Ollama/OllamaResourceBuilderExtensions.Model.cs @@ -145,10 +145,6 @@ private static IResourceBuilder AddModelResourceCommand( builder.WithCommand( name: name, displayName: displayName, - updateState: context => - context.ResourceSnapshot.State?.Text == KnownResourceStates.Running ? - ResourceCommandState.Enabled : - ResourceCommandState.Disabled, executeCommand: async context => { var modelResource = builder.Resource; @@ -165,13 +161,15 @@ private static IResourceBuilder AddModelResourceCommand( return await executeCommand(modelResource, ollamaClient, logger, notificationService, context.CancellationToken); }, - displayDescription: displayDescription, - parameter: parameter, - confirmationMessage: confirmationMessage, - iconName: iconName, - iconVariant: iconVariant, - isHighlighted: isHighlighted - ); + commandOptions: new() + { + Description = displayDescription, + Parameter = parameter, + ConfirmationMessage = confirmationMessage, + IconName = iconName, + IconVariant = iconVariant, + IsHighlighted = isHighlighted + }); private static IResourceBuilder WithModelDownload(this IResourceBuilder builder) { diff --git a/src/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects/SqlProjectBuilderExtensions.cs b/src/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects/SqlProjectBuilderExtensions.cs index 1182aff17..749fb7716 100644 --- a/src/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects/SqlProjectBuilderExtensions.cs +++ b/src/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects/SqlProjectBuilderExtensions.cs @@ -215,11 +215,14 @@ internal static IResourceBuilder InternalWithReference(thi var service = context.ServiceProvider.GetRequiredService(); await service.PublishSqlProject(builder.Resource, target.Resource, targetDatabaseName, context.CancellationToken); return new ExecuteCommandResult { Success = true }; - }, updateState: (context) => context.ResourceSnapshot?.State?.Text == KnownResourceStates.Finished ? ResourceCommandState.Enabled : ResourceCommandState.Disabled, - displayDescription: "Redeploys the SQL Server Database Project to the target database.", - iconName: "ArrowReset", - iconVariant: IconVariant.Filled, - isHighlighted: true); + }, new CommandOptions() + { + Description = "Redeploys the SQL Server Database Project to the target database.", + IconName = "ArrowReset", + IconVariant = IconVariant.Filled, + IsHighlighted = true, + UpdateState = (context) => context.ResourceSnapshot?.State?.Text == KnownResourceStates.Finished ? ResourceCommandState.Enabled : ResourceCommandState.Disabled, + }); return builder; } diff --git a/tests/CommunityToolkit.Aspire.Hosting.Bun.Tests/AddBunAppTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Bun.Tests/AddBunAppTests.cs index b8ee03800..8f48ea03f 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.Bun.Tests/AddBunAppTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.Bun.Tests/AddBunAppTests.cs @@ -120,8 +120,9 @@ public void AddBunNullNameThrows() public void AddBunEmptyNameThrows() { var builder = DistributedApplication.CreateBuilder(); + var name = ""; - Assert.Throws(() => builder.AddBunApp("")); + Assert.Throws(() => builder.AddBunApp(name)); } [Fact] diff --git a/tests/CommunityToolkit.Aspire.Hosting.Ngrok.Tests/AddNgrokTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Ngrok.Tests/AddNgrokTests.cs index 0a4aea598..e01d7c134 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.Ngrok.Tests/AddNgrokTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.Ngrok.Tests/AddNgrokTests.cs @@ -41,7 +41,8 @@ public void AddNgrokEmptyNameThrows() { var builder = DistributedApplication.CreateBuilder(); - Assert.Throws(() => builder.AddNgrok("")); + var name = ""; + Assert.Throws(() => builder.AddNgrok(name)); } [Fact] @@ -64,16 +65,18 @@ public void AddNgrokWhitespaceConfigurationFolderThrows() public void AddNgrokEmptyEndpointNameFolderThrows() { var builder = DistributedApplication.CreateBuilder(); + var endpointName = ""; - Assert.Throws(() => builder.AddNgrok("ngrok", endpointName: "")); + Assert.Throws(() => builder.AddNgrok("ngrok", endpointName)); } [Fact] public void AddNgrokWhitespaceEndpointNameFolderThrows() { var builder = DistributedApplication.CreateBuilder(); + var endpointName = " "; - Assert.Throws(() => builder.AddNgrok("ngrok", endpointName: " ")); + Assert.Throws(() => builder.AddNgrok("ngrok", endpointName)); } [Fact] From 80a8d54efa4a70d46d85525fcf577729a64965f3 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Fri, 11 Apr 2025 04:02:13 +0000 Subject: [PATCH 2/8] Updating the version of the CT --- Directory.Build.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 22eb2b09c..ddc18982e 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -37,8 +37,8 @@ - 3 - 1 + 4 + 0 preview.1 $(AspireMajorVersion).$(ToolkitMinorVersion).$(ToolkitPatchVersion) From 3fcdafeacdbf729b99b754da52621c9676afb9a8 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Fri, 11 Apr 2025 04:10:03 +0000 Subject: [PATCH 3/8] Fixing ollama tests --- .../OllamaResourceBuilderExtensions.Model.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/CommunityToolkit.Aspire.Hosting.Ollama/OllamaResourceBuilderExtensions.Model.cs b/src/CommunityToolkit.Aspire.Hosting.Ollama/OllamaResourceBuilderExtensions.Model.cs index 723aa532b..0b7261507 100644 --- a/src/CommunityToolkit.Aspire.Hosting.Ollama/OllamaResourceBuilderExtensions.Model.cs +++ b/src/CommunityToolkit.Aspire.Hosting.Ollama/OllamaResourceBuilderExtensions.Model.cs @@ -168,7 +168,11 @@ private static IResourceBuilder AddModelResourceCommand( ConfirmationMessage = confirmationMessage, IconName = iconName, IconVariant = iconVariant, - IsHighlighted = isHighlighted + IsHighlighted = isHighlighted, + UpdateState = context => + context.ResourceSnapshot.State?.Text == KnownResourceStates.Running ? + ResourceCommandState.Enabled : + ResourceCommandState.Disabled, }); private static IResourceBuilder WithModelDownload(this IResourceBuilder builder) From de5fa77c788d4188472effeaf05f105d2242ee9a Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Fri, 11 Apr 2025 04:33:58 +0000 Subject: [PATCH 4/8] Fixing test to match the updated Bicep output --- .../ResourceCreationTests.cs | 159 +++++++++--------- 1 file changed, 81 insertions(+), 78 deletions(-) diff --git a/tests/CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis.Tests/ResourceCreationTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis.Tests/ResourceCreationTests.cs index 1f16e91ab..7e15ed114 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis.Tests/ResourceCreationTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis.Tests/ResourceCreationTests.cs @@ -8,27 +8,27 @@ namespace CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis.Tests; public class ResourceCreationTests { - [Fact] - public void WithReference_WhenAADDisabled_UsesPasswordSecret() - { - using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); + [Fact] + public void WithReference_WhenAADDisabled_UsesPasswordSecret() + { + using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); - var redisState = builder.AddAzureRedis("redisState") - .WithAccessKeyAuthentication() - .RunAsContainer(); + var redisState = builder.AddAzureRedis("redisState") + .WithAccessKeyAuthentication() + .RunAsContainer(); - var daprState = builder.AddDaprStateStore("statestore") - .WithReference(redisState); + var daprState = builder.AddDaprStateStore("statestore") + .WithReference(redisState); - using var app = builder.Build(); + using var app = builder.Build(); - var appModel = app.Services.GetRequiredService(); + var appModel = app.Services.GetRequiredService(); - var redisCache = Assert.Single(appModel.Resources.OfType()); + var redisCache = Assert.Single(appModel.Resources.OfType()); - string redisBicep = redisCache.GetBicepTemplateString(); + string redisBicep = redisCache.GetBicepTemplateString(); - string expectedRedisBicep = $$""" + string expectedRedisBicep = $$""" @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location @@ -56,7 +56,7 @@ param keyVaultName string } resource connectionString 'Microsoft.KeyVault/vaults/secrets@2023-07-01' = { - name: 'connectionString' + name: 'connectionstrings--redisState' properties: { value: '${redisState.properties.hostName},ssl=true,password=${redisState.listKeys().primaryKey}' } @@ -71,19 +71,21 @@ param keyVaultName string parent: keyVault } + output name string = redisState.name + output daprConnectionString string = '${redisState.properties.hostName}:${redisState.properties.sslPort}' output redisKeyVaultName string = keyVaultName """; - Assert.Equal(NormalizeLineEndings(expectedRedisBicep), NormalizeLineEndings(redisBicep)); + Assert.Equal(NormalizeLineEndings(expectedRedisBicep), NormalizeLineEndings(redisBicep)); - var componentResources = appModel.Resources.OfType(); - var daprResource = Assert.Single(componentResources, _ => _.Name == "redisDaprComponent"); + var componentResources = appModel.Resources.OfType(); + var daprResource = Assert.Single(componentResources, _ => _.Name == "redisDaprComponent"); - string daprBicep = daprResource.GetBicepTemplateString(); + string daprBicep = daprResource.GetBicepTemplateString(); - string expectedDaprBicep = $$""" + string expectedDaprBicep = $$""" @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location @@ -125,29 +127,30 @@ param secretStoreComponent string parent: containerAppEnvironment } """; - Assert.Equal(NormalizeLineEndings(expectedDaprBicep), NormalizeLineEndings(daprBicep)); + Assert.Equal(NormalizeLineEndings(expectedDaprBicep), NormalizeLineEndings(daprBicep)); - } + } - [Fact] - public void WithReference_WhenAADEnabled_SkipsPasswordSecret() - { - using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); + [Fact] + public void WithReference_WhenAADEnabled_SkipsPasswordSecret() + { + using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); - var redisState = builder.AddAzureRedis("redisState").RunAsContainer(); + var redisState = builder.AddAzureRedis("redisState") + .RunAsContainer(); - var daprState = builder.AddDaprStateStore("statestore") - .WithReference(redisState); + var daprState = builder.AddDaprStateStore("statestore") + .WithReference(redisState); - using var app = builder.Build(); + using var app = builder.Build(); - var appModel = app.Services.GetRequiredService(); + var appModel = app.Services.GetRequiredService(); - var redisCache = Assert.Single(appModel.Resources.OfType()); + var redisCache = Assert.Single(appModel.Resources.OfType()); - string redisBicep = redisCache.GetBicepTemplateString(); + string redisBicep = redisCache.GetBicepTemplateString(); - string expectedRedisBicep = $$""" + string expectedRedisBicep = $$""" @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location @@ -191,15 +194,15 @@ param principalName string output daprConnectionString string = '${redisState.properties.hostName}:${redisState.properties.sslPort}' """; - Assert.Equal(NormalizeLineEndings(expectedRedisBicep), NormalizeLineEndings(redisBicep)); + Assert.Equal(NormalizeLineEndings(expectedRedisBicep), NormalizeLineEndings(redisBicep)); - var componentResources = appModel.Resources.OfType(); - var daprResource = Assert.Single(componentResources, _ => _.Name == "redisDaprComponent"); + var componentResources = appModel.Resources.OfType(); + var daprResource = Assert.Single(componentResources, _ => _.Name == "redisDaprComponent"); - string daprBicep = daprResource.GetBicepTemplateString(); + string daprBicep = daprResource.GetBicepTemplateString(); - string expectedDaprBicep = $$""" + string expectedDaprBicep = $$""" @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location @@ -246,36 +249,36 @@ param principalId string """; - Assert.Equal(NormalizeLineEndings(expectedDaprBicep), NormalizeLineEndings(daprBicep)); + Assert.Equal(NormalizeLineEndings(expectedDaprBicep), NormalizeLineEndings(daprBicep)); - } + } - [Fact] - public void WithReference_WhenTLSDisabled_UsesNonSslPort() - { - using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); + [Fact] + public void WithReference_WhenTLSDisabled_UsesNonSslPort() + { + using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); - var redisState = builder.AddAzureRedis("redisState") - .ConfigureInfrastructure(infr => - { - var redis = infr.GetProvisionableResources().OfType().Single(); - redis.EnableNonSslPort = true; - }) - .RunAsContainer(); + var redisState = builder.AddAzureRedis("redisState") + .ConfigureInfrastructure(infr => + { + var redis = infr.GetProvisionableResources().OfType().Single(); + redis.EnableNonSslPort = true; + }) + .RunAsContainer(); - var daprState = builder.AddDaprStateStore("statestore") - .WithReference(redisState); + var daprState = builder.AddDaprStateStore("statestore") + .WithReference(redisState); - using var app = builder.Build(); + using var app = builder.Build(); - var appModel = app.Services.GetRequiredService(); + var appModel = app.Services.GetRequiredService(); - var redisCache = Assert.Single(appModel.Resources.OfType()); + var redisCache = Assert.Single(appModel.Resources.OfType()); - string redisBicep = redisCache.GetBicepTemplateString(); + string redisBicep = redisCache.GetBicepTemplateString(); - string expectedRedisBicep = $$""" + string expectedRedisBicep = $$""" @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location @@ -320,26 +323,26 @@ param principalName string """; - Assert.Equal(NormalizeLineEndings(expectedRedisBicep), NormalizeLineEndings(redisBicep)); - } - - [Fact] - public void WithReference_WhenNonStateType_ThrowsException() - { - using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); + Assert.Equal(NormalizeLineEndings(expectedRedisBicep), NormalizeLineEndings(redisBicep)); + } - var redisState = builder.AddAzureRedis("redisState").RunAsContainer(); - var ex = Assert.Throws(() => + [Fact] + public void WithReference_WhenNonStateType_ThrowsException() + { + using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); + + var redisState = builder.AddAzureRedis("redisState").RunAsContainer(); + var ex = Assert.Throws(() => + { + var daprPubSub = builder.AddDaprPubSub("statestore") + .WithReference(redisState); + }); + + Assert.Contains("Unsupported Dapr component type: pubsub", ex.Message); + } + public static string NormalizeLineEndings(string input) { - var daprPubSub = builder.AddDaprPubSub("statestore") - .WithReference(redisState); - }); - - Assert.Contains("Unsupported Dapr component type: pubsub", ex.Message); - } - public static string NormalizeLineEndings(string input) - { - return input.Replace("\r\n", "\n"); - } + return input.Replace("\r\n", "\n"); + } } From 78c8999d596ef5eb0458e9cf3056124c38620e38 Mon Sep 17 00:00:00 2001 From: Brett Smith Date: Fri, 18 Apr 2025 14:41:27 +1200 Subject: [PATCH 5/8] Update ResourceCreationTests.cs Update tests to remove principal information --- .../ResourceCreationTests.cs | 32 +++---------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/tests/CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis.Tests/ResourceCreationTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis.Tests/ResourceCreationTests.cs index 7e15ed114..f6b76d04b 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis.Tests/ResourceCreationTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis.Tests/ResourceCreationTests.cs @@ -154,10 +154,6 @@ public void WithReference_WhenAADEnabled_SkipsPasswordSecret() @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location - param principalId string - - param principalName string - resource redisState 'Microsoft.Cache/redis@2024-03-01' = { name: take('redisState-${uniqueString(resourceGroup().id)}', 63) location: location @@ -179,18 +175,10 @@ param principalName string } } - resource redisState_contributor 'Microsoft.Cache/redis/accessPolicyAssignments@2024-03-01' = { - name: take('redisstatecontributor${uniqueString(resourceGroup().id)}', 24) - properties: { - accessPolicyName: 'Data Contributor' - objectId: principalId - objectIdAlias: principalName - } - parent: redisState - } - output connectionString string = '${redisState.properties.hostName},ssl=true' + output name string = redisState.name + output daprConnectionString string = '${redisState.properties.hostName}:${redisState.properties.sslPort}' """; @@ -282,10 +270,6 @@ public void WithReference_WhenTLSDisabled_UsesNonSslPort() @description('The location for the resource(s) to be deployed.') param location string = resourceGroup().location - param principalId string - - param principalName string - resource redisState 'Microsoft.Cache/redis@2024-03-01' = { name: take('redisState-${uniqueString(resourceGroup().id)}', 63) location: location @@ -307,18 +291,10 @@ param principalName string } } - resource redisState_contributor 'Microsoft.Cache/redis/accessPolicyAssignments@2024-03-01' = { - name: take('redisstatecontributor${uniqueString(resourceGroup().id)}', 24) - properties: { - accessPolicyName: 'Data Contributor' - objectId: principalId - objectIdAlias: principalName - } - parent: redisState - } - output connectionString string = '${redisState.properties.hostName},ssl=true' + output name string = redisState.name + output daprConnectionString string = '${redisState.properties.hostName}:${redisState.properties.port}' """; From 0c6da737684581f4970906009f23b598e746dcb7 Mon Sep 17 00:00:00 2001 From: Alireza Baloochi Date: Sat, 19 Apr 2025 16:29:14 +0330 Subject: [PATCH 6/8] Populate redis password in dbgate --- .../RedisBuilderExtensions.cs | 6 ++++-- .../AddDbGateTests.cs | 12 ++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/CommunityToolkit.Aspire.Hosting.Redis.Extensions/RedisBuilderExtensions.cs b/src/CommunityToolkit.Aspire.Hosting.Redis.Extensions/RedisBuilderExtensions.cs index d0b04a679..a1632eb7f 100644 --- a/src/CommunityToolkit.Aspire.Hosting.Redis.Extensions/RedisBuilderExtensions.cs +++ b/src/CommunityToolkit.Aspire.Hosting.Redis.Extensions/RedisBuilderExtensions.cs @@ -64,9 +64,11 @@ private static void ConfigureDbGateContainer(EnvironmentCallbackContext context, { // DbGate assumes Redis is being accessed over a default Aspire container network and hardcodes the resource address - // This will need to be refactored once updated service discovery APIs are available + var redisUrl = redisResource.PasswordParameter is not null ? + $"redis://:{redisResource.PasswordParameter.Value}@{redisResource.Name}:{redisResource.PrimaryEndpoint.TargetPort}" : $"redis://{redisResource.Name}:{redisResource.PrimaryEndpoint.TargetPort}"; + context.EnvironmentVariables.Add($"LABEL_redis{counter}", redisResource.Name); - context.EnvironmentVariables.Add($"URL_redis{counter}", redisResource.ConnectionStringExpression); + context.EnvironmentVariables.Add($"URL_redis{counter}", $"redis://:{redisResource.PasswordParameter!.Value}@{redisResource.Name}:{redisResource.PrimaryEndpoint.TargetPort}"); context.EnvironmentVariables.Add($"ENGINE_redis{counter}", "redis@dbgate-plugin-redis"); counter++; diff --git a/tests/CommunityToolkit.Aspire.Hosting.DbGate.Tests/AddDbGateTests.cs b/tests/CommunityToolkit.Aspire.Hosting.DbGate.Tests/AddDbGateTests.cs index 168794cca..496506d15 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.DbGate.Tests/AddDbGateTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.DbGate.Tests/AddDbGateTests.cs @@ -333,10 +333,12 @@ public async Task WithDbGateShouldAddAnnotationsForMultipleDatabaseTypes() Assert.Equal("LABEL_redis1", item.Key); Assert.Equal(redisResource1.Name, item.Value); }, - async item => + item => { + var redisUrl = redisResource1.PasswordParameter is not null ? + $"redis://:{redisResource1.PasswordParameter.Value}@{redisResource1.Name}:{redisResource1.PrimaryEndpoint.TargetPort}" : $"redis://{redisResource1.Name}:{redisResource1.PrimaryEndpoint.TargetPort}"; Assert.Equal("URL_redis1", item.Key); - Assert.Equal(await redisResource1.ConnectionStringExpression.GetValueAsync(default), item.Value); + Assert.Equal(redisUrl, item.Value); }, item => { @@ -348,10 +350,12 @@ public async Task WithDbGateShouldAddAnnotationsForMultipleDatabaseTypes() Assert.Equal("LABEL_redis2", item.Key); Assert.Equal(redisResource2.Name, item.Value); }, - async item => + item => { + var redisUrl = redisResource2.PasswordParameter is not null ? + $"redis://:{redisResource2.PasswordParameter.Value}@{redisResource2.Name}:{redisResource2.PrimaryEndpoint.TargetPort}" : $"redis://{redisResource2.Name}:{redisResource2.PrimaryEndpoint.TargetPort}"; Assert.Equal("URL_redis2", item.Key); - Assert.Equal(await redisResource2.ConnectionStringExpression.GetValueAsync(default), item.Value); + Assert.Equal(redisUrl, item.Value); }, item => { From f37550b1c0ea7c5d9c0f0a4d94473f690e06f0cc Mon Sep 17 00:00:00 2001 From: Alireza Baloochi Date: Sat, 19 Apr 2025 17:07:54 +0330 Subject: [PATCH 7/8] Fix redis-password tests --- .../RedisBuilderExtensions.cs | 2 +- .../ResourceCreationTests.cs | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/CommunityToolkit.Aspire.Hosting.Redis.Extensions/RedisBuilderExtensions.cs b/src/CommunityToolkit.Aspire.Hosting.Redis.Extensions/RedisBuilderExtensions.cs index a1632eb7f..51902f82b 100644 --- a/src/CommunityToolkit.Aspire.Hosting.Redis.Extensions/RedisBuilderExtensions.cs +++ b/src/CommunityToolkit.Aspire.Hosting.Redis.Extensions/RedisBuilderExtensions.cs @@ -68,7 +68,7 @@ private static void ConfigureDbGateContainer(EnvironmentCallbackContext context, $"redis://:{redisResource.PasswordParameter.Value}@{redisResource.Name}:{redisResource.PrimaryEndpoint.TargetPort}" : $"redis://{redisResource.Name}:{redisResource.PrimaryEndpoint.TargetPort}"; context.EnvironmentVariables.Add($"LABEL_redis{counter}", redisResource.Name); - context.EnvironmentVariables.Add($"URL_redis{counter}", $"redis://:{redisResource.PasswordParameter!.Value}@{redisResource.Name}:{redisResource.PrimaryEndpoint.TargetPort}"); + context.EnvironmentVariables.Add($"URL_redis{counter}", redisUrl); context.EnvironmentVariables.Add($"ENGINE_redis{counter}", "redis@dbgate-plugin-redis"); counter++; diff --git a/tests/CommunityToolkit.Aspire.Hosting.Redis.Extensions.Tests/ResourceCreationTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Redis.Extensions.Tests/ResourceCreationTests.cs index 8d522f8e6..7ef0e3167 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.Redis.Extensions.Tests/ResourceCreationTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.Redis.Extensions.Tests/ResourceCreationTests.cs @@ -36,6 +36,8 @@ public async Task WithDbGateAddsAnnotations() }, async item => { + var redisUrl = redisResource.PasswordParameter is not null ? + $"redis://:{redisResource.PasswordParameter.Value}@{redisResource.Name}:{redisResource.PrimaryEndpoint.TargetPort}" : $"redis://{redisResource.Name}:{redisResource.PrimaryEndpoint.TargetPort}"; Assert.Equal("URL_redis1", item.Key); Assert.Equal(await redisResource.ConnectionStringExpression.GetValueAsync(default), item.Value); }, @@ -139,10 +141,13 @@ public async Task WithDbGateAddsAnnotationsForMultipleRedisResource() Assert.Equal("LABEL_redis1", item.Key); Assert.Equal(redisResource1.Name, item.Value); }, - async item => + item => { + var redisUrl = redisResource1.PasswordParameter is not null ? + $"redis://:{redisResource1.PasswordParameter.Value}@{redisResource1.Name}:{redisResource1.PrimaryEndpoint.TargetPort}" : $"redis://{redisResource1.Name}:{redisResource1.PrimaryEndpoint.TargetPort}"; + Assert.Equal("URL_redis1", item.Key); - Assert.Equal(await redisResource1.ConnectionStringExpression.GetValueAsync(default), item.Value); + Assert.Equal(redisUrl, item.Value); }, item => { @@ -154,10 +159,13 @@ public async Task WithDbGateAddsAnnotationsForMultipleRedisResource() Assert.Equal("LABEL_redis2", item.Key); Assert.Equal(redisResource2.Name, item.Value); }, - async item => + item => { + var redisUrl = redisResource2.PasswordParameter is not null ? + $"redis://:{redisResource2.PasswordParameter.Value}@{redisResource2.Name}:{redisResource2.PrimaryEndpoint.TargetPort}" : $"redis://{redisResource2.Name}:{redisResource2.PrimaryEndpoint.TargetPort}"; + Assert.Equal("URL_redis2", item.Key); - Assert.Equal(await redisResource2.ConnectionStringExpression.GetValueAsync(default), item.Value); + Assert.Equal(redisUrl, item.Value); }, item => { From 827e14dc611bd1482e2b4a3a0df65ca3906bb0e6 Mon Sep 17 00:00:00 2001 From: Alireza Baloochi Date: Sat, 19 Apr 2025 17:13:53 +0330 Subject: [PATCH 8/8] Fix test --- .../ResourceCreationTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/CommunityToolkit.Aspire.Hosting.Redis.Extensions.Tests/ResourceCreationTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Redis.Extensions.Tests/ResourceCreationTests.cs index 7ef0e3167..6b2caf915 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.Redis.Extensions.Tests/ResourceCreationTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.Redis.Extensions.Tests/ResourceCreationTests.cs @@ -34,12 +34,12 @@ public async Task WithDbGateAddsAnnotations() Assert.Equal("LABEL_redis1", item.Key); Assert.Equal(redisResource.Name, item.Value); }, - async item => + item => { var redisUrl = redisResource.PasswordParameter is not null ? $"redis://:{redisResource.PasswordParameter.Value}@{redisResource.Name}:{redisResource.PrimaryEndpoint.TargetPort}" : $"redis://{redisResource.Name}:{redisResource.PrimaryEndpoint.TargetPort}"; Assert.Equal("URL_redis1", item.Key); - Assert.Equal(await redisResource.ConnectionStringExpression.GetValueAsync(default), item.Value); + Assert.Equal(redisUrl, item.Value); }, item => {