diff --git a/Aspire.sln b/Aspire.sln index 4e4c57ae801..12f3719255e 100644 --- a/Aspire.sln +++ b/Aspire.sln @@ -520,6 +520,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hosting", "Hosting", "{830A EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.Hosting.Redis.Tests", "tests\Aspire.Hosting.Redis.Tests\Aspire.Hosting.Redis.Tests.csproj", "{1BC02557-B78B-48CE-9D3C-488A6B7672F4}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Aspire.Hosting.Garnet.Tests", "tests\Aspire.Hosting.Garnet.Tests\Aspire.Hosting.Garnet.Tests.csproj", "{CAA4A93F-6BEB-42EB-8680-C1CF72928023}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.Hosting.PostgreSQL.Tests", "tests\Aspire.Hosting.PostgreSQL.Tests\Aspire.Hosting.PostgreSQL.Tests.csproj", "{7425E5B2-BC47-4521-AC40-B8CECA329E08}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Aspire.Hosting.Qdrant.Tests", "tests\Aspire.Hosting.Qdrant.Tests\Aspire.Hosting.Qdrant.Tests.csproj", "{8E2AA85E-C351-47B4-AF91-58557FAD5840}" @@ -1393,6 +1394,10 @@ Global {1BC02557-B78B-48CE-9D3C-488A6B7672F4}.Debug|Any CPU.Build.0 = Debug|Any CPU {1BC02557-B78B-48CE-9D3C-488A6B7672F4}.Release|Any CPU.ActiveCfg = Release|Any CPU {1BC02557-B78B-48CE-9D3C-488A6B7672F4}.Release|Any CPU.Build.0 = Release|Any CPU + {CAA4A93F-6BEB-42EB-8680-C1CF72928023}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CAA4A93F-6BEB-42EB-8680-C1CF72928023}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CAA4A93F-6BEB-42EB-8680-C1CF72928023}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CAA4A93F-6BEB-42EB-8680-C1CF72928023}.Release|Any CPU.Build.0 = Release|Any CPU {8E2AA85E-C351-47B4-AF91-58557FAD5840}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8E2AA85E-C351-47B4-AF91-58557FAD5840}.Debug|Any CPU.Build.0 = Debug|Any CPU {8E2AA85E-C351-47B4-AF91-58557FAD5840}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -1692,6 +1697,7 @@ Global {DF00FDA3-D3EC-4E07-B4EC-0EBB57A813A4} = {77CFE74A-32EE-400C-8930-5025E8555256} {5CB63205-24F4-4388-A41B-BAF3BEA59866} = {B80354C7-BE58-43F6-8928-9F3A74AB7F47} {588CD2D7-EE70-43C1-8233-330854BDF53C} = {4981B3A5-4AFD-4191-BF7D-8692D9783D60} + {588CD2D7-EE70-43C1-8233-330854BDF53C} = {4981B3A5-4AFD-4191-BF7D-8692D9783D60} {E6BE41D3-872C-47D2-B5B1-78C37AFAEAF9} = {D173887B-AF42-4576-B9C1-96B9E9B3D9C0} {9357EC71-823B-433A-9993-B7CB2FA082D1} = {B80354C7-BE58-43F6-8928-9F3A74AB7F47} {3F7B206E-5457-458F-AA81-9449FA3C1B5C} = {27381127-6C45-4B4C-8F18-41FF48DFE4B2} @@ -1708,6 +1714,7 @@ Global {C424395C-1235-41A4-BF55-07880A04368C} = {4981B3A5-4AFD-4191-BF7D-8692D9783D60} {830A89EC-4029-4753-B25A-068BAE37DEC7} = {4981B3A5-4AFD-4191-BF7D-8692D9783D60} {1BC02557-B78B-48CE-9D3C-488A6B7672F4} = {830A89EC-4029-4753-B25A-068BAE37DEC7} + {CAA4A93F-6BEB-42EB-8680-C1CF72928023} = {830A89EC-4029-4753-B25A-068BAE37DEC7} {8E2AA85E-C351-47B4-AF91-58557FAD5840} = {830A89EC-4029-4753-B25A-068BAE37DEC7} {986886B7-0E38-4890-92C3-5B46DE322DAF} = {830A89EC-4029-4753-B25A-068BAE37DEC7} {7425E5B2-BC47-4521-AC40-B8CECA329E08} = {830A89EC-4029-4753-B25A-068BAE37DEC7} diff --git a/tests/Aspire.EndToEnd.Tests/IntegrationServicesFixture.cs b/tests/Aspire.EndToEnd.Tests/IntegrationServicesFixture.cs index fff3ef970f4..fc0bfb2b6c3 100644 --- a/tests/Aspire.EndToEnd.Tests/IntegrationServicesFixture.cs +++ b/tests/Aspire.EndToEnd.Tests/IntegrationServicesFixture.cs @@ -104,7 +104,6 @@ public Task DumpComponentLogsAsync(TestResourceNames resource, ITestOutputHelper { TestResourceNames.cosmos or TestResourceNames.efcosmos => "cosmos", TestResourceNames.eventhubs => "eventhubs", - TestResourceNames.garnet => "garnet", TestResourceNames.mongodb => "mongodb", TestResourceNames.oracledatabase => "oracledatabase", TestResourceNames.postgres or TestResourceNames.efnpgsql => "postgres", @@ -146,7 +145,6 @@ private static TestResourceNames GetResourcesToSkip() "basicservices" => TestResourceNames.mongodb | TestResourceNames.rabbitmq | TestResourceNames.redis - | TestResourceNames.garnet | TestResourceNames.postgres | TestResourceNames.efnpgsql | TestResourceNames.sqlserver diff --git a/tests/Aspire.EndToEnd.Tests/IntegrationServicesTests.cs b/tests/Aspire.EndToEnd.Tests/IntegrationServicesTests.cs index e8d2393a257..5957d3622cb 100644 --- a/tests/Aspire.EndToEnd.Tests/IntegrationServicesTests.cs +++ b/tests/Aspire.EndToEnd.Tests/IntegrationServicesTests.cs @@ -28,7 +28,6 @@ public IntegrationServicesTests(ITestOutputHelper testOutput, IntegrationService [InlineData(TestResourceNames.efnpgsql)] [InlineData(TestResourceNames.rabbitmq)] [InlineData(TestResourceNames.redis)] - [InlineData(TestResourceNames.garnet)] [InlineData(TestResourceNames.sqlserver)] [InlineData(TestResourceNames.efsqlserver)] public Task VerifyComponentWorks(TestResourceNames resourceName) diff --git a/tests/Aspire.Hosting.Tests/Garnet/AddGarnetTests.cs b/tests/Aspire.Hosting.Garnet.Tests/AddGarnetTests.cs similarity index 99% rename from tests/Aspire.Hosting.Tests/Garnet/AddGarnetTests.cs rename to tests/Aspire.Hosting.Garnet.Tests/AddGarnetTests.cs index 1f085bd84d5..2bfad626dc7 100644 --- a/tests/Aspire.Hosting.Tests/Garnet/AddGarnetTests.cs +++ b/tests/Aspire.Hosting.Garnet.Tests/AddGarnetTests.cs @@ -2,12 +2,12 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Net.Sockets; -using Aspire.Hosting.Garnet; +using Aspire.Hosting.ApplicationModel; using Aspire.Hosting.Utils; using Microsoft.Extensions.DependencyInjection; using Xunit; -namespace Aspire.Hosting.Tests.Garnet; +namespace Aspire.Hosting.Garnet.Tests; public class AddGarnetTests { diff --git a/tests/Aspire.Hosting.Garnet.Tests/Aspire.Hosting.Garnet.Tests.csproj b/tests/Aspire.Hosting.Garnet.Tests/Aspire.Hosting.Garnet.Tests.csproj new file mode 100644 index 00000000000..45d530cbf04 --- /dev/null +++ b/tests/Aspire.Hosting.Garnet.Tests/Aspire.Hosting.Garnet.Tests.csproj @@ -0,0 +1,21 @@ + + + + $(NetCurrent) + + + + + + + + + + + + + + + + + diff --git a/tests/Aspire.Hosting.Garnet.Tests/GarnetFunctionalTests.cs b/tests/Aspire.Hosting.Garnet.Tests/GarnetFunctionalTests.cs new file mode 100644 index 00000000000..31836aeaacf --- /dev/null +++ b/tests/Aspire.Hosting.Garnet.Tests/GarnetFunctionalTests.cs @@ -0,0 +1,70 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Aspire.Components.Common.Tests; +using Aspire.Hosting.Utils; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Logging; +using Polly; +using StackExchange.Redis; +using Xunit; +using Xunit.Abstractions; + +namespace Aspire.Hosting.Garnet.Tests; + +public class GarnetFunctionalTests(ITestOutputHelper testOutputHelper) +{ + [Fact] + [RequiresDocker] + public async Task VerifyGarnetResource() + { + var cts = new CancellationTokenSource(TimeSpan.FromMinutes(5)); + var pipeline = new ResiliencePipelineBuilder() + .AddRetry(new() { MaxRetryAttempts = 10, Delay = TimeSpan.FromSeconds(3) }) + .Build(); + + var builder = CreateDistributedApplicationBuilder(); + + var garnet = builder.AddGarnet("garnet"); + + using var app = builder.Build(); + + await app.StartAsync(); + + var hb = Host.CreateApplicationBuilder(); + + hb.Configuration.AddInMemoryCollection(new Dictionary + { + [$"ConnectionStrings:{garnet.Resource.Name}"] = await garnet.Resource.ConnectionStringExpression.GetValueAsync(default) + }); + + hb.AddRedisClient(garnet.Resource.Name); + + using var host = hb.Build(); + + await host.StartAsync(); + + var redisClient = host.Services.GetRequiredService(); + + await pipeline.ExecuteAsync(async token => + { + var db = redisClient.GetDatabase(); + + await db.StringSetAsync("key", "value"); + + var value = await db.StringGetAsync("key"); + + Assert.Equal("value", value); + + }, cts.Token); + } + + private TestDistributedApplicationBuilder CreateDistributedApplicationBuilder() + { + var builder = TestDistributedApplicationBuilder.Create(); + builder.Services.AddXunitLogging(testOutputHelper); + return builder; + } +} diff --git a/tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj b/tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj index 2048b530116..aae8ef5214d 100644 --- a/tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj +++ b/tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj @@ -12,7 +12,6 @@ - @@ -26,7 +25,6 @@ - diff --git a/tests/Aspire.Hosting.Tests/ManifestGenerationTests.cs b/tests/Aspire.Hosting.Tests/ManifestGenerationTests.cs index ad9dc7e3e43..8b31b7c4623 100644 --- a/tests/Aspire.Hosting.Tests/ManifestGenerationTests.cs +++ b/tests/Aspire.Hosting.Tests/ManifestGenerationTests.cs @@ -3,7 +3,6 @@ using System.Text.Json; using Aspire.Components.Common.Tests; -using Aspire.Hosting.Garnet; using Aspire.Hosting.MongoDB; using Aspire.Hosting.Postgres; using Aspire.Hosting.Publishing; @@ -480,7 +479,6 @@ public void VerifyTestProgramFullManifest() "SKIP_RESOURCES": "None", "ConnectionStrings__tempdb": "{tempdb.connectionString}", "ConnectionStrings__redis": "{redis.connectionString}", - "ConnectionStrings__garnet": "{garnet.connectionString}", "ConnectionStrings__postgresdb": "{postgresdb.connectionString}", "ConnectionStrings__rabbitmq": "{rabbitmq.connectionString}", "ConnectionStrings__mymongodb": "{mymongodb.connectionString}", @@ -535,19 +533,6 @@ public void VerifyTestProgramFullManifest() } } }, - "garnet": { - "type": "container.v0", - "connectionString": "{garnet.bindings.tcp.host}:{garnet.bindings.tcp.port}", - "image": "{{GarnetContainerImageTags.Registry}}/{{GarnetContainerImageTags.Image}}:{{GarnetContainerImageTags.Tag}}", - "bindings": { - "tcp": { - "scheme": "tcp", - "protocol": "tcp", - "transport": "tcp", - "targetPort": 6379 - } - } - }, "postgres": { "type": "container.v0", "connectionString": "Host={postgres.bindings.tcp.host};Port={postgres.bindings.tcp.port};Username=postgres;Password={postgres-password.value}", diff --git a/tests/testproject/Common/TestResourceNames.cs b/tests/testproject/Common/TestResourceNames.cs index 5a83a638252..6343b8bc90a 100644 --- a/tests/testproject/Common/TestResourceNames.cs +++ b/tests/testproject/Common/TestResourceNames.cs @@ -16,11 +16,10 @@ public enum TestResourceNames redis = 1 << 9, sqlserver = 1 << 10, efnpgsql = 1 << 11, - garnet = 1 << 12, eventhubs = 1 << 13, efsqlserver = 1 << 16, efcosmos = 1 << 17, - All = cosmos | dashboard | mongodb | oracledatabase | postgres | rabbitmq | redis | sqlserver | efnpgsql | garnet | eventhubs | efsqlserver | efcosmos + All = cosmos | dashboard | mongodb | oracledatabase | postgres | rabbitmq | redis | sqlserver | efnpgsql | eventhubs | efsqlserver | efcosmos } public static class TestResourceNamesExtensions diff --git a/tests/testproject/TestProject.AppHost/TestProgram.cs b/tests/testproject/TestProject.AppHost/TestProgram.cs index 2bdaaea2079..92404fab4cf 100644 --- a/tests/testproject/TestProject.AppHost/TestProgram.cs +++ b/tests/testproject/TestProject.AppHost/TestProgram.cs @@ -95,11 +95,6 @@ private TestProgram( .WithImageRegistry(AspireTestContainerRegistry); IntegrationServiceABuilder = IntegrationServiceABuilder.WithReference(redis); } - if (!resourcesToSkip.HasFlag(TestResourceNames.garnet)) - { - var garnet = AppBuilder.AddGarnet("garnet"); - IntegrationServiceABuilder = IntegrationServiceABuilder.WithReference(garnet); - } if (!resourcesToSkip.HasFlag(TestResourceNames.postgres) || !resourcesToSkip.HasFlag(TestResourceNames.efnpgsql)) { var postgresDbName = "postgresdb"; diff --git a/tests/testproject/TestProject.AppHost/TestProject.AppHost.csproj b/tests/testproject/TestProject.AppHost/TestProject.AppHost.csproj index c58d160e08d..bd2730f43e7 100644 --- a/tests/testproject/TestProject.AppHost/TestProject.AppHost.csproj +++ b/tests/testproject/TestProject.AppHost/TestProject.AppHost.csproj @@ -13,7 +13,6 @@ - diff --git a/tests/testproject/TestProject.AppHost/aspire-manifest.json b/tests/testproject/TestProject.AppHost/aspire-manifest.json index 6c28e9e65f2..b41157fbeaa 100644 --- a/tests/testproject/TestProject.AppHost/aspire-manifest.json +++ b/tests/testproject/TestProject.AppHost/aspire-manifest.json @@ -130,7 +130,6 @@ "ConnectionStrings__tempdb": "{tempdb.connectionString}", "ConnectionStrings__mysqldb": "{mysqldb.connectionString}", "ConnectionStrings__redis": "{redis.connectionString}", - "ConnectionStrings__garnet": "{garnet.connectionString}", "ConnectionStrings__valkey": "{valkey.connectionString}", "ConnectionStrings__postgresdb": "{postgresdb.connectionString}", "ConnectionStrings__rabbitmq": "{rabbitmq.connectionString}", @@ -207,19 +206,6 @@ } } }, - "garnet": { - "type": "container.v0", - "connectionString": "{garnet.bindings.tcp.host}:{garnet.bindings.tcp.port}", - "image": "ghcr.io/microsoft/garnet:latest", - "bindings": { - "tcp": { - "scheme": "tcp", - "protocol": "tcp", - "transport": "tcp", - "targetPort": 6379 - } - } - }, "valkey": { "type": "container.v0", "connectionString": "{valkey.bindings.tcp.host}:{valkey.bindings.tcp.port}", diff --git a/tests/testproject/TestProject.IntegrationServiceA/Garnet/GarnetExtensions.cs b/tests/testproject/TestProject.IntegrationServiceA/Garnet/GarnetExtensions.cs deleted file mode 100644 index 186f7ef3c7e..00000000000 --- a/tests/testproject/TestProject.IntegrationServiceA/Garnet/GarnetExtensions.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -using StackExchange.Redis; - -public static class GarnetExtensions -{ - public static void MapGarnetApi(this WebApplication app) - { - app.MapGet("/garnet/verify", VerifyGarnetAsync); - } - - private static async Task VerifyGarnetAsync([FromKeyedServices("garnet")] IConnectionMultiplexer cm) - { - try - { - var key = "somekey"; - var content = "somecontent"; - - var database = cm.GetDatabase(); - await database.StringSetAsync(key, content); - var data = await database.StringGetAsync(key); - - return data == content ? Results.Ok("Success!") : Results.Problem("Failed"); - } - catch (Exception e) - { - return Results.Problem(e.ToString()); - } - } -} diff --git a/tests/testproject/TestProject.IntegrationServiceA/Program.cs b/tests/testproject/TestProject.IntegrationServiceA/Program.cs index 82611b5f24b..937fe4f536e 100644 --- a/tests/testproject/TestProject.IntegrationServiceA/Program.cs +++ b/tests/testproject/TestProject.IntegrationServiceA/Program.cs @@ -21,10 +21,6 @@ { builder.AddKeyedRedisClient("redis"); } -if (!resourcesToSkip.HasFlag(TestResourceNames.garnet)) -{ - builder.AddKeyedRedisClient("garnet"); -} if (!resourcesToSkip.HasFlag(TestResourceNames.postgres) || !resourcesToSkip.HasFlag(TestResourceNames.efnpgsql)) { builder.AddNpgsqlDataSource("postgresdb"); @@ -91,11 +87,6 @@ app.MapRedisApi(); } -if (!resourcesToSkip.HasFlag(TestResourceNames.garnet)) -{ - app.MapGarnetApi(); -} - if (!resourcesToSkip.HasFlag(TestResourceNames.mongodb)) { app.MapMongoDBApi();