diff --git a/tests/Aspire.Hosting.Tests/Dcp/DcpExecutorTests.cs b/tests/Aspire.Hosting.Tests/Dcp/DcpExecutorTests.cs index 6759aeef90e..cb62ab19195 100644 --- a/tests/Aspire.Hosting.Tests/Dcp/DcpExecutorTests.cs +++ b/tests/Aspire.Hosting.Tests/Dcp/DcpExecutorTests.cs @@ -20,6 +20,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Polly; +using Polly.Retry; namespace Aspire.Hosting.Tests.Dcp; @@ -1575,10 +1576,15 @@ public async Task PlainExecutable_ExtensionMode_SupportedDebugMode_RunsInIde() // Act await appExecutor.RunApplicationAsync(); - await Task.Delay(2000); // Assert - var dcpExes = kubernetesService.CreatedResources.OfType().ToList(); - Assert.Equal(2, dcpExes.Count); + List dcpExes = []; + var haveExes = RetryTillTrueOrTimeout(() => + { + dcpExes.Clear(); + dcpExes.AddRange(kubernetesService.CreatedResources.OfType()); + return dcpExes.Count == 2; + }, TestConstants.DefaultOrchestratorTestTimeout); + Assert.True(haveExes, $"Expected two running but instead got {dcpExes.Count}"); var debuggableExe = Assert.Single(dcpExes, e => e.AppModelResourceName == "TestExecutable"); Assert.Equal(ExecutionType.IDE, debuggableExe.Spec.ExecutionType); @@ -2045,6 +2051,22 @@ private static DcpExecutor CreateAppExecutor( developerCertificateService); } + private static bool RetryTillTrueOrTimeout(Func check, int timeoutMilliseconds) + { + var retry = new ResiliencePipelineBuilder() + .AddRetry(new RetryStrategyOptions + { + BackoffType = DelayBackoffType.Exponential, + Delay = TimeSpan.FromMilliseconds(200), + MaxDelay = TimeSpan.FromSeconds(2), + MaxRetryAttempts = int.MaxValue, + ShouldHandle = args => ValueTask.FromResult(!args.Outcome.Result) + }) + .AddTimeout(TimeSpan.FromMilliseconds(timeoutMilliseconds)) + .Build(); + return retry.Execute(check); + } + private sealed class TestExecutableResource(string directory) : ExecutableResource("TestExecutable", "test", directory); private sealed class TestOtherExecutableResource(string directory) : ExecutableResource("TestOtherExecutable", "test-other", directory);