Skip to content

WaitBehavior being ignored when waiting for resource to be healthy in a test. #7601

@afscrome

Description

@afscrome

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

Trying the following in 9.1. I'm expecting the below test to fail since dependency should fail to start due to failToStart failing to start.

   [Test]
   public async Task Test()
   {
      using var appHost = DistributedApplicationTestingBuilder.Create();

      appHost.Services.AddLogging(x => x
         .AddNUnit()
         .AddFilter("Default", LogLevel.Information)
         .AddFilter("Microsoft.AspNetCore", LogLevel.Warning)
         .AddFilter("Aspire.Hosting.Dcp", LogLevel.Warning)
         .AddFilter("Aspire.Hosting", LogLevel.Debug)
      );

      var failToStart = appHost.AddExecutable("failToStart", "does-not-exist", ".");
      var dependency = appHost.AddContainer("redis", "redis");

      dependency.WaitFor(failToStart, WaitBehavior.StopOnDependencyFailure);

      using var app = appHost.Build();
      await app.StartAsync();
      await app.ResourceNotifications.WaitForResourceHealthyAsync(dependency.Resource.Name).WaitAsync(TimeSpan.FromSeconds(15));
   }

Expected Behavior

I'd expect waiting for redis to become healthy to fail as the resource has entered the terminal FailedToStart state.

Steps To Reproduce

See above code

Exceptions (if any)

info: Aspire.Hosting.DistributedApplication[0]
      Aspire version: 9.1.0-preview.1.25111.2+6adbbbaf7db1fdefae489033cfb30681d2f7bc2f
info: Aspire.Hosting.DistributedApplication[0]
      Distributed application starting.
info: Aspire.Hosting.DistributedApplication[0]
      Application host directory is: S:\REDACTED.Aspire\src\REDACTED.Aspire.AppHost.Tests
dbug: Aspire.Hosting.ApplicationModel.ResourceNotificationService[0]
      Resource redis/redis-zfrbuahn changed state: Starting
dbug: Aspire.Hosting.ApplicationModel.ResourceNotificationService[0]
      Resource redis/redis-zfrbuahn changed state: Starting -> Waiting
info: REDACTED.Aspire.AppHost.Tests.Resources.redis[0]
      1: 2025-02-13T19:25:32.6919100Z Waiting for resource 'failToStart' to enter the 'Running' state.
dbug: Aspire.Hosting.ApplicationModel.ResourceNotificationService[0]
      Waiting for resource 'redis' to match predicate.
dbug: Aspire.Hosting.ApplicationModel.ResourceNotificationService[0]
      Resource failToStart/failToStart-cafpnxdq changed state: Starting
fail: Aspire.Hosting.Dcp.dcpctrl.ExecutableReconciler[0]
      failed to start a process	{"Executable": {"name":"failToStart-cafpnxdq"}, "Reconciliation": 2, "error": "exec: \"does-not-exist\": executable file not found in %PATH%"}

fail: Aspire.Hosting.Dcp.dcpctrl.ExecutableReconciler[0]
      failed to start Executable	{"Executable": {"name":"failToStart-cafpnxdq"}, "Reconciliation": 2, "error": "exec: \"does-not-exist\": executable file not found in %PATH%"}

dbug: Aspire.Hosting.ApplicationModel.ResourceNotificationService[0]
      Resource failToStart/failToStart-cafpnxdq changed state: FailedToStart
fail: REDACTED.Aspire.AppHost.Tests.Resources.redis[0]
      2: 2025-02-13T19:25:36.1905556Z Dependency resource 'failToStart' failed to start.
fail: REDACTED.Aspire.AppHost.Tests.Resources.redis[0]
      3: 2025-02-13T19:25:36.2000362Z Failed to create container resource redis
Aspire.Hosting.DistributedApplicationException: Dependency resource 'failToStart' failed to start.
         at Aspire.Hosting.ApplicationModel.ResourceNotificationService.<>c__DisplayClass18_0.<<WaitUntilHealthyAsync>g__Core|1>d.MoveNext() in /_/src/Aspire.Hosting/ApplicationModel/ResourceNotificationService.cs:line 173
      --- End of stack trace from previous location ---
         at Aspire.Hosting.ApplicationModel.ResourceNotificationService.WaitUntilHealthyAsync(IResource resource, IResource dependency, WaitBehavior waitBehavior, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/ApplicationModel/ResourceNotificationService.cs:line 157
         at Aspire.Hosting.ApplicationModel.ResourceNotificationService.WaitForDependenciesAsync(IResource resource, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/ApplicationModel/ResourceNotificationService.cs:line 330
         at Aspire.Hosting.Orchestrator.ApplicationOrchestrator.WaitForInBeforeResourceStartedEvent(BeforeResourceStartedEvent event, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Orchestrator/ApplicationOrchestrator.cs:line 76
         at Aspire.Hosting.Eventing.DistributedApplicationEventing.<>c__DisplayClass4_0`1.<<Subscribe>b__0>d.MoveNext() in /_/src/Aspire.Hosting/Eventing/DistributedApplicationEventing.cs:line 82
      --- End of stack trace from previous location ---
         at Aspire.Hosting.Eventing.DistributedApplicationEventing.PublishAsync[T](T event, EventDispatchBehavior dispatchBehavior, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Eventing/DistributedApplicationEventing.cs:line 69
         at Aspire.Hosting.Orchestrator.ApplicationOrchestrator.OnResourceStarting(OnResourceStartingContext context) in /_/src/Aspire.Hosting/Orchestrator/ApplicationOrchestrator.cs:line 133
         at Aspire.Hosting.Dcp.DcpExecutorEvents.PublishAsync[T](T context) in /_/src/Aspire.Hosting/Dcp/DcpExecutorEvents.cs:line 33
         at Aspire.Hosting.Dcp.DcpExecutor.CreateContainerAsync(AppResource cr, ILogger resourceLogger, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Dcp/DcpExecutor.cs:line 1164
         at Aspire.Hosting.Dcp.DcpExecutor.<CreateContainersAsync>g__CreateContainerAsyncCore|67_0(AppResource cr, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Dcp/DcpExecutor.cs:line 1118
dbug: Aspire.Hosting.ApplicationModel.ResourceNotificationService[0]
      Resource redis/redis-zfrbuahn changed state: Waiting -> FailedToStart
info: Aspire.Hosting.DistributedApplication[0]
      Distributed application started. Press Ctrl+C to shut down.
dbug: Aspire.Hosting.ApplicationModel.ResourceNotificationService[0]
      Waiting for resource 'redis' to enter the 'Healthy' state.

.NET Version info

.NET SDK:
 Version:           9.0.200
 Commit:            90e8b202f2
 Workload version:  9.0.200-manifests.c4f6226a
 MSBuild version:   17.13.8+cbc39bea8

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.22621
 OS Platform: Windows
 RID:         win-x64
 Base Path:   C:\Program Files\dotnet\sdk\9.0.200\

.NET workloads installed:
There are no installed workloads to display.
Configured to use loose manifests when installing new manifests.

Host:
  Version:      9.0.2
  Architecture: x64
  Commit:       80aa709f5d

.NET SDKs installed:
  6.0.428 [C:\Program Files\dotnet\sdk]
  8.0.406 [C:\Program Files\dotnet\sdk]
  9.0.100 [C:\Program Files\dotnet\sdk]
  9.0.200 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
  Microsoft.AspNetCore.App 6.0.36 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 7.0.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 7.0.20 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 8.0.13 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 9.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 9.0.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 6.0.36 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 8.0.12 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 8.0.13 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 9.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 9.0.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 6.0.36 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 8.0.12 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 8.0.13 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 9.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
  Microsoft.WindowsDesktop.App 9.0.2 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
  x86   [C:\Program Files (x86)\dotnet]
    registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]

Environment variables:
  Not set

global.json file:
  Not found

Learn more:
  https://aka.ms/dotnet/info

Download .NET:
  https://aka.ms/dotnet/download

Anything else?

  <Sdk Name="Aspire.AppHost.Sdk" Version="9.1.0-preview.1.25111.2" />
    <PackageVersion Include="Aspire.Hosting" Version="9.1.0-preview.1.25111.2" />
    <PackageVersion Include="Aspire.Hosting.AppHost" Version="9.1.0-preview.1.25111.2" />
    <PackageVersion Include="Aspire.Hosting.Redis" Version="9.1.0-preview.1.25111.2" />
    <PackageVersion Include="Aspire.Hosting.Testing" Version="9.1.0-preview.1.25111.2" />

Metadata

Metadata

Assignees

Labels

area-app-modelIssues pertaining to the APIs in Aspire.Hosting, e.g. DistributedApplication

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions