| File: HostedAgentExtensionTests.cs | Web Access |
| Project: src\tests\Aspire.Hosting.Foundry.Tests\Aspire.Hosting.Foundry.Tests.csproj (Aspire.Hosting.Foundry.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 ASPIRECOMPUTE003 // Type is for evaluation purposes only and is subject to change or removal in future updates. Suppress this diagnostic to proceed. using Aspire.Hosting.ApplicationModel; using Aspire.Hosting.Utils; using Microsoft.Extensions.DependencyInjection; namespace Aspire.Hosting.Foundry.Tests; public class HostedAgentExtensionTests { [Fact] public void PublishAsHostedAgent_InRunMode_AddsHttpEndpoint() { using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Run); var project = builder.AddFoundry("account") .AddProject("my-project"); var app = builder.AddPythonApp("agent", "./app.py", "main:app") .PublishAsHostedAgent(project); builder.Build(); // In run mode, the resource should have an HTTP endpoint annotation Assert.True(app.Resource.TryGetEndpoints(out var endpoints)); Assert.Contains(endpoints, e => e.Name == "http"); } [Fact] public void PublishAsHostedAgent_InRunMode_ConfiguresHealthCheck() { using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Run); var project = builder.AddFoundry("account") .AddProject("my-project"); builder.AddPythonApp("agent", "./app.py", "main:app") .PublishAsHostedAgent(project); builder.Build(); // The resource should have a health check annotation from WithHttpHealthCheck var resource = builder.Resources.Single(r => r.Name == "agent"); var healthAnnotation = resource.Annotations.OfType<HealthCheckAnnotation>().FirstOrDefault(); Assert.NotNull(healthAnnotation); } [Fact] public void PublishAsHostedAgent_InPublishMode_DoesNotValidateRegion() { using var builder = TestDistributedApplicationBuilder.Create( DistributedApplicationOperation.Publish); builder.Configuration["Azure:Location"] = "invalidregion"; var project = builder.AddFoundry("account") .AddProject("my-project"); var app = builder.AddPythonApp("agent", "./app.py", "main:app") .PublishAsHostedAgent(project); Assert.NotNull(app); } [Fact] public void PublishAsHostedAgent_InPublishMode_AcceptsValidRegion() { using var builder = TestDistributedApplicationBuilder.Create( DistributedApplicationOperation.Publish); builder.Configuration["Azure:Location"] = "eastus"; var project = builder.AddFoundry("account") .AddProject("my-project"); var app = builder.AddPythonApp("agent", "./app.py", "main:app") .PublishAsHostedAgent(project); Assert.NotNull(app); } [Fact] public void PublishAsHostedAgent_NoRegionConfig_DoesNotThrow() { using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var project = builder.AddFoundry("account") .AddProject("my-project"); var app = builder.AddPythonApp("agent", "./app.py", "main:app") .PublishAsHostedAgent(project); Assert.NotNull(app); } [Fact] public void PublishAsHostedAgent_InPublishMode_CreatesHostedAgentResource() { using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var project = builder.AddFoundry("account") .AddProject("my-project"); builder.AddPythonApp("agent", "./app.py", "main:app") .PublishAsHostedAgent(project); builder.Build(); var hostedAgent = builder.Resources.OfType<AzureHostedAgentResource>().SingleOrDefault(); Assert.NotNull(hostedAgent); Assert.Equal("agent-ha", hostedAgent.Name); } [Fact] public void PublishAsHostedAgent_WithoutProject_CreatesDefaultProject() { using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); builder.AddPythonApp("agent", "./app.py", "main:app") .PublishAsHostedAgent(); builder.Build(); // A project should be auto-created var project = builder.Resources.OfType<AzureCognitiveServicesProjectResource>().SingleOrDefault(); Assert.NotNull(project); } [Fact] public async Task FoundryProject_DefaultRegistryDoesNotAddGlobalRegistryTargets() { using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish); var registry = builder.AddAzureContainerRegistry("global"); builder.AddFoundry("account") .AddProject("my-project"); var container = builder.AddContainer("redis", "redis:latest"); using var app = builder.Build(); var model = app.Services.GetRequiredService<DistributedApplicationModel>(); await builder.Eventing.PublishAsync(new BeforeStartEvent(app.Services, model)); var registryTargets = container.Resource.Annotations.OfType<RegistryTargetAnnotation>().ToList(); var registryTarget = Assert.Single(registryTargets); Assert.Same(registry.Resource, registryTarget.Registry); } }