| File: AzureProvisioningResourceTests.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 System.Runtime.CompilerServices; using Aspire.Hosting.ApplicationModel; using Aspire.Hosting.Azure.AppContainers; using Aspire.Hosting.Utils; using Microsoft.Extensions.DependencyInjection; namespace Aspire.Hosting.Azure.Tests; public class AzureProvisioningResourceTests { [Fact] public async Task PublishAsAzureContainerApp_CreatesAzureContainerAppResource() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); builder.AddAzureContainerAppEnvironment("env"); var apiProject = builder.AddProject<Project>("api", launchProfileName: null); apiProject.PublishAsAzureContainerApp((infrastructure, containerApp) => { // This callback should have access to the original resource // via the AzureContainerAppResource.TargetResource property Assert.IsType<AzureContainerAppResource>(infrastructure.AspireResource); var containerAppResource = (AzureContainerAppResource)infrastructure.AspireResource; Assert.Same(apiProject.Resource, containerAppResource.TargetResource); }); using var app = builder.Build(); await ExecuteBeforeStartHooksAsync(app, default); var model = app.Services.GetRequiredService<DistributedApplicationModel>(); var project = Assert.Single(model.GetProjectResources()); // Verify the deployment target was created project.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target); var provisioningResource = target?.DeploymentTarget as AzureContainerAppResource; Assert.NotNull(provisioningResource); // Verify the target resource is accessible Assert.Same(apiProject.Resource, provisioningResource.TargetResource); } [Fact] public async Task PublishAsAzureAppServiceWebsite_CreatesAzureWebSiteResource() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); builder.AddAzureAppServiceEnvironment("env"); var apiProject = builder.AddProject<Project>("api", launchProfileName: null); apiProject.PublishAsAzureAppServiceWebsite((infrastructure, website) => { // This callback should have access to the original resource // via the AzureAppServiceWebSiteResource.TargetResource property Assert.IsType<AzureAppServiceWebSiteResource>(infrastructure.AspireResource); var webSiteResource = (AzureAppServiceWebSiteResource)infrastructure.AspireResource; Assert.Same(apiProject.Resource, webSiteResource.TargetResource); }); using var app = builder.Build(); await ExecuteBeforeStartHooksAsync(app, default); var model = app.Services.GetRequiredService<DistributedApplicationModel>(); var project = Assert.Single(model.GetProjectResources()); // Verify the deployment target was created project.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target); var provisioningResource = target?.DeploymentTarget as AzureAppServiceWebSiteResource; Assert.NotNull(provisioningResource); // Verify the target resource is accessible Assert.Same(apiProject.Resource, provisioningResource.TargetResource); } [Fact] public async Task ContainerResource_WithPublishAsContainerApp_CreatesAzureContainerAppResource() { var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); builder.AddAzureContainerAppEnvironment("env"); var container = builder.AddContainer("api", "myimage"); container.PublishAsAzureContainerApp((infrastructure, containerApp) => { // Verify we can access the original container resource Assert.IsType<AzureContainerAppResource>(infrastructure.AspireResource); var containerAppResource = (AzureContainerAppResource)infrastructure.AspireResource; Assert.Same(container.Resource, containerAppResource.TargetResource); }); using var app = builder.Build(); await ExecuteBeforeStartHooksAsync(app, default); var model = app.Services.GetRequiredService<DistributedApplicationModel>(); var containerResource = Assert.Single(model.GetContainerResources()); // Verify the deployment target was created with the correct type containerResource.TryGetLastAnnotation<DeploymentTargetAnnotation>(out var target); var provisioningResource = target?.DeploymentTarget as AzureContainerAppResource; Assert.NotNull(provisioningResource); Assert.Same(container.Resource, provisioningResource.TargetResource); } [UnsafeAccessor(UnsafeAccessorKind.Method, Name = "ExecuteBeforeStartHooksAsync")] private static extern Task ExecuteBeforeStartHooksAsync(DistributedApplication app, CancellationToken cancellationToken); private sealed class Project : IProjectMetadata { public string ProjectPath => "project"; } }