File: Secrets\SecretStoreDefaultPathTests.cs
Web Access
Project: src\tests\Aspire.Hosting.Radius.Tests\Aspire.Hosting.Radius.Tests.csproj (Aspire.Hosting.Radius.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#pragma warning disable ASPIRERADIUS006 // Experimental: the secret-store APIs are under test.
#pragma warning disable ASPIREPIPELINES001
 
using Aspire.Hosting.ApplicationModel;
using Aspire.Hosting.Radius.Publishing;
using Aspire.Hosting.Utils;
using Microsoft.Extensions.DependencyInjection;
 
namespace Aspire.Hosting.Radius.Tests.Secrets;
 
public class SecretStoreDefaultPathTests
{
    [Fact]
    public void NoSecretStore_Publish_EmitsNoSecretStores()
    {
        using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish);
        builder.AddRadiusEnvironment("radius");
        builder.AddContainer("api", "img", "latest");
 
        using var app = builder.Build();
        var model = app.Services.GetRequiredService<DistributedApplicationModel>();
        var radiusEnv = model.Resources.OfType<RadiusEnvironmentResource>().First();
        RadiusTestHelper.AttachDeploymentTargets(radiusEnv, model);
        var bicep = new RadiusBicepPublishingContext(radiusEnv).GenerateBicep(model);
 
        Assert.DoesNotContain("secretStores", bicep);
    }
 
    [Fact]
    public void RunMode_DoesNotAddSecretStoreToModel()
    {
        using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Run);
        var pass = builder.AddParameter("db-pass", secret: true);
        builder.AddRadiusSecretStore("db-creds", RadiusSecretStoreType.Generic)
            .WithData(d => d.Add("password", pass));
 
        using var app = builder.Build();
        var model = app.Services.GetRequiredService<DistributedApplicationModel>();
 
        // The Radius integration is publish/deploy-only; in Run mode the store is not registered,
        // so nothing is emitted and no kubectl/rad contact can occur (SC-007).
        Assert.Empty(model.Resources.OfType<RadiusSecretStoreResource>());
    }
 
    [Fact]
    public void RunMode_SecretParameter_ResolvesFromConfiguration()
    {
        using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Run);
        var pass = builder.AddParameter("db-pass", secret: true);
        builder.AddRadiusSecretStore("db-creds", RadiusSecretStoreType.Generic)
            .WithData(d => d.Add("password", pass));
 
        // The Aspire secret parameter is unaffected by the secret-store declaration.
        Assert.True(pass.Resource.Secret);
    }
}