File: CloudProviders\CredentialModeOverrideTests.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.
 
using Aspire.Hosting.Radius.Annotations;
using Aspire.Hosting.Radius.CloudProviders;
 
namespace Aspire.Hosting.Radius.Tests.CloudProviders;
 
public class CredentialModeOverrideTests
{
    private const string SubId = "11111111-1111-1111-1111-111111111111";
    private const string Rg = "rg";
    private const string TenantId = "22222222-2222-2222-2222-222222222222";
    private const string ClientId = "33333333-3333-3333-3333-333333333333";
    private const string AccountId = "123456789012";
    private const string Region = "us-east-1";
    private const string Arn = "arn:aws:iam::123456789012:role/r";
 
    [Fact]
    public void Azure_WithServicePrincipal_ThenWithWorkloadIdentity_LastWriteWins()
    {
        var builder = DistributedApplication.CreateBuilder();
        var secret = builder.AddParameter("s", "v", secret: true);
        var env = builder.AddRadiusEnvironment("radius");
 
        env.WithAzureProvider(SubId, Rg, azure =>
        {
            azure.WithServicePrincipal(TenantId, ClientId, secret);
            azure.WithWorkloadIdentity(TenantId, ClientId);
        });
 
        var ann = env.Resource.Annotations.OfType<RadiusCloudProvidersAnnotation>().Single();
        Assert.IsType<AzureRadiusCredential.WorkloadIdentity>(ann.Azure!.Credential);
    }
 
    [Fact]
    public void Aws_WithAccessKey_ThenWithIrsa_LastWriteWins()
    {
        var builder = DistributedApplication.CreateBuilder();
        var keyId = builder.AddParameter("k", "v", secret: true);
        var keySecret = builder.AddParameter("ks", "v", secret: true);
        var env = builder.AddRadiusEnvironment("radius");
 
        env.WithAwsProvider(AccountId, Region, aws =>
        {
            aws.WithAccessKey(keyId, keySecret);
            aws.WithIrsa(Arn);
        });
 
        var ann = env.Resource.Annotations.OfType<RadiusCloudProvidersAnnotation>().Single();
        Assert.IsType<AwsRadiusCredential.Irsa>(ann.Aws!.Credential);
    }
 
    [Fact]
    public void Azure_TwoWithAzureProviderCalls_OnSameEnv_LastWriteWins()
    {
        var builder = DistributedApplication.CreateBuilder();
        var secret = builder.AddParameter("s", "v", secret: true);
        var env = builder.AddRadiusEnvironment("radius");
        const string SecondSub = "44444444-4444-4444-4444-444444444444";
 
        env.WithAzureProvider(SubId, Rg, azure => azure.WithServicePrincipal(TenantId, ClientId, secret));
        env.WithAzureProvider(SecondSub, "rg2", azure => azure.WithWorkloadIdentity(TenantId, ClientId));
 
        var ann = env.Resource.Annotations.OfType<RadiusCloudProvidersAnnotation>().Single();
        Assert.Equal(SecondSub, ann.Azure!.SubscriptionId);
        Assert.Equal("rg2", ann.Azure.ResourceGroup);
        Assert.IsType<AzureRadiusCredential.WorkloadIdentity>(ann.Azure.Credential);
    }
}