| File: TokenCredentialProviderTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.Azure.Tests\Aspire.Hosting.Azure.Tests.csproj (Aspire.Hosting.Azure.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.Utils; using Azure.Core; using Microsoft.Extensions.DependencyInjection; namespace Aspire.Hosting.Azure.Tests; public class TokenCredentialProviderTests { [Fact] public void AddAzureProvisioning_RegistersITokenCredentialProvider() { using var builder = TestDistributedApplicationBuilder.Create(); builder.AddAzureProvisioning(); using var app = builder.Build(); var provider = app.Services.GetRequiredService<ITokenCredentialProvider>(); Assert.NotNull(provider); Assert.NotNull(provider.TokenCredential); } [Fact] public void AddAzureProvisioning_RegistersITokenCredentialProviderAsSingleton() { using var builder = TestDistributedApplicationBuilder.Create(); builder.AddAzureProvisioning(); using var app = builder.Build(); var first = app.Services.GetRequiredService<ITokenCredentialProvider>(); var second = app.Services.GetRequiredService<ITokenCredentialProvider>(); Assert.Same(first, second); Assert.Same(first.TokenCredential, second.TokenCredential); } [Fact] public void AddingAzureResource_RegistersITokenCredentialProvider() { // AddAzureProvisioning is invoked indirectly when an Azure resource is added. using var builder = TestDistributedApplicationBuilder.Create(); builder.AddAzureInfrastructure("infra", _ => { }); using var app = builder.Build(); var provider = app.Services.GetRequiredService<ITokenCredentialProvider>(); Assert.NotNull(provider.TokenCredential); } [Fact] public void ITokenCredentialProvider_CanBeReplacedWithCustomImplementation() { // External callers should be able to plug in their own credential by // replacing the registered service with their own implementation. var customCredential = new TestTokenCredential(); var customProvider = new CustomTokenCredentialProvider(customCredential); using var builder = TestDistributedApplicationBuilder.Create(); builder.AddAzureProvisioning(); builder.Services.AddSingleton<ITokenCredentialProvider>(customProvider); using var app = builder.Build(); var resolved = app.Services.GetRequiredService<ITokenCredentialProvider>(); Assert.Same(customProvider, resolved); Assert.Same(customCredential, resolved.TokenCredential); } private sealed class CustomTokenCredentialProvider(TokenCredential credential) : ITokenCredentialProvider { public TokenCredential TokenCredential { get; } = credential; } }