File: CloudProviders\AdditiveCompatibilityTests.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;
 
namespace Aspire.Hosting.Radius.Tests.CloudProviders;
 
public class AdditiveCompatibilityTests
{
    [Fact]
    public void EnvironmentWithoutProvider_HasNoCloudProvidersAnnotation()
    {
        var builder = DistributedApplication.CreateBuilder();
        var env = builder.AddRadiusEnvironment("radius");
 
        Assert.Empty(env.Resource.Annotations.OfType<RadiusCloudProvidersAnnotation>());
    }
 
    [Fact]
    public void EnvironmentWithAzureProvider_HasAnnotationButOnlyAzureSlotPopulated()
    {
        var builder = DistributedApplication.CreateBuilder();
        var secret = builder.AddParameter("s", "v", secret: true);
        var env = builder.AddRadiusEnvironment("radius")
            .WithAzureProvider(
                "11111111-1111-1111-1111-111111111111", "rg",
                azure => azure.WithServicePrincipal(
                    "22222222-2222-2222-2222-222222222222",
                    "33333333-3333-3333-3333-333333333333",
                    secret));
 
        var ann = env.Resource.Annotations.OfType<RadiusCloudProvidersAnnotation>().Single();
        Assert.NotNull(ann.Azure);
        Assert.Null(ann.Aws);
    }
 
    [Fact]
    public void GetOrAdd_ReturnsSameInstance_OnRepeatedCalls()
    {
        var builder = DistributedApplication.CreateBuilder();
        var env = builder.AddRadiusEnvironment("radius");
 
        var first = RadiusCloudProvidersAnnotation.GetOrAdd(env.Resource);
        var second = RadiusCloudProvidersAnnotation.GetOrAdd(env.Resource);
 
        Assert.Same(first, second);
        Assert.Single(env.Resource.Annotations.OfType<RadiusCloudProvidersAnnotation>());
    }
}