Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -177,15 +177,14 @@ public async Task ResourceEventsForContainersFireForSpecificResources()
var beforeResourceStartedTcs = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);

using var builder = TestDistributedApplicationBuilder.Create();
var redis = builder.AddRedis("redis");

builder.Eventing.Subscribe<BeforeResourceStartedEvent>(redis.Resource, (e, ct) =>
{
Assert.NotNull(e.Services);
Assert.NotNull(e.Resource);
beforeResourceStartedTcs.TrySetResult();
return Task.CompletedTask;
});
var redis = builder.AddRedis("redis")
.OnBeforeResourceStarted((_, e, _) =>
{
Assert.NotNull(e.Services);
Assert.NotNull(e.Resource);
beforeResourceStartedTcs.TrySetResult();
return Task.CompletedTask;
});

using var app = builder.Build();
await app.StartAsync().DefaultTimeout(TestConstants.DefaultOrchestratorTestTimeout);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,15 +145,14 @@ public async Task ResourcesWithHealthCheck_StopsAndRestartsMonitoringWithResourc
return HealthCheckResult.Healthy();
});

var resource = builder.AddResource(new ParentResource("resource"))
.WithHealthCheck("healthcheck_a");

var channel = Channel.CreateUnbounded<ResourceReadyEvent>();
builder.Eventing.Subscribe<ResourceReadyEvent>(resource.Resource, (@event, ct) =>
{
channel.Writer.TryWrite(@event);
return Task.CompletedTask;
});
var resource = builder.AddResource(new ParentResource("resource"))
.WithHealthCheck("healthcheck_a")
.OnResourceReady((_, @event, _) =>
{
channel.Writer.TryWrite(@event);
return Task.CompletedTask;
});

await using var app = await builder.BuildAsync().DefaultTimeout();

Expand Down Expand Up @@ -335,14 +334,14 @@ await app.ResourceNotifications.PublishUpdateAsync(resource.Resource, s => s wit
public async Task ResourcesWithoutHealthCheckAnnotationsGetReadyEventFired()
{
using var builder = TestDistributedApplicationBuilder.Create(testOutputHelper);
var resource = builder.AddResource(new ParentResource("resource"));

var blockAssert = new TaskCompletionSource<ResourceReadyEvent>();
builder.Eventing.Subscribe<ResourceReadyEvent>(resource.Resource, (@event, ct) =>
{
blockAssert.SetResult(@event);
return Task.CompletedTask;
});
var resource = builder.AddResource(new ParentResource("resource"))
.OnResourceReady((_, @event, _) =>
{
blockAssert.SetResult(@event);
return Task.CompletedTask;
});

using var app = builder.Build();
var pendingStart = app.StartAsync();
Expand Down Expand Up @@ -410,17 +409,16 @@ public async Task ResourceHealthCheckServiceDoesNotRunHealthChecksUnlessResource
return checkStatus;
});

var parent = builder.AddResource(new ParentResource("parent"))
.WithHealthCheck("parent_test");

// Handle ResourceReadyEvent and use it to control when we drop through to do our assert
// on the health test being executed.
var resourceReadyEventFired = new TaskCompletionSource<ResourceReadyEvent>();
builder.Eventing.Subscribe<ResourceReadyEvent>(parent.Resource, (@event, ct) =>
{
resourceReadyEventFired.SetResult(@event);
return Task.CompletedTask;
});
var parent = builder.AddResource(new ParentResource("parent"))
.WithHealthCheck("parent_test")
.OnResourceReady((_, @event, _) =>
{
resourceReadyEventFired.SetResult(@event);
return Task.CompletedTask;
});

using var app = builder.Build();
var pendingStart = app.StartAsync().DefaultTimeout(TestConstants.LongTimeoutDuration);
Expand Down Expand Up @@ -468,18 +466,17 @@ public async Task ResourceHealthCheckServiceOnlyRaisesResourceReadyOnce()
return HealthCheckResult.Healthy();
});

var parent = builder.AddResource(new ParentResource("parent"))
.WithHealthCheck("parent_test");

// Handle ResourceReadyEvent and use it to control when we drop through to do our assert
// on the health test being executed.
var eventHits = 0;
var resourceReadyEventFired = new TaskCompletionSource<ResourceReadyEvent>();
builder.Eventing.Subscribe<ResourceReadyEvent>(parent.Resource, (@event, ct) =>
{
Interlocked.Increment(ref eventHits);
return Task.CompletedTask;
});
var parent = builder.AddResource(new ParentResource("parent"))
.WithHealthCheck("parent_test")
.OnResourceReady((_, @event, _) =>
{
Interlocked.Increment(ref eventHits);
return Task.CompletedTask;
});

using var app = builder.Build();
var pendingStart = app.StartAsync().DefaultTimeout();
Expand Down Expand Up @@ -516,24 +513,23 @@ public async Task VerifyThatChildResourceWillBecomeHealthyOnceParentBecomesHealt
using var builder = TestDistributedApplicationBuilder.CreateWithTestContainerRegistry(testOutputHelper);

builder.Services.AddHealthChecks().AddCheck("parent_test", () => HealthCheckResult.Healthy());
var parent = builder.AddResource(new ParentResource("parent"))
.WithHealthCheck("parent_test");

var parentReady = new TaskCompletionSource<ResourceReadyEvent>();
builder.Eventing.Subscribe<ResourceReadyEvent>(parent.Resource, (@event, ct) =>
{
parentReady.SetResult(@event);
return Task.CompletedTask;
});

var child = builder.AddResource(new ChildResource("child", parent.Resource));
var parent = builder.AddResource(new ParentResource("parent"))
.WithHealthCheck("parent_test")
.OnResourceReady((_, @event, _) =>
{
parentReady.SetResult(@event);
return Task.CompletedTask;
});

var childReady = new TaskCompletionSource<ResourceReadyEvent>();
builder.Eventing.Subscribe<ResourceReadyEvent>(child.Resource, (@event, ct) =>
{
childReady.SetResult(@event);
return Task.CompletedTask;
});
var child = builder.AddResource(new ChildResource("child", parent.Resource))
.OnResourceReady((_, @event, _) =>
{
childReady.SetResult(@event);
return Task.CompletedTask;
});

using var app = builder.Build();
var pendingStart = app.StartAsync();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,10 +120,17 @@ public async Task InitializeResourceEventPublished()

var events = new DcpExecutorEvents();
var resourceNotificationService = ResourceNotificationServiceTestHelpers.Create();
var applicationEventing = new DistributedApplicationEventing();
var applicationEventing = builder.Eventing;

var initResourceTcs = new TaskCompletionSource();
InitializeResourceEvent? initEvent = null;
resource.OnInitializeResource((_, @event, _) =>
{
initEvent = @event;
initResourceTcs.SetResult();
return Task.CompletedTask;
});

applicationEventing.Subscribe<InitializeResourceEvent>(resource.Resource, (@event, ct) =>
{
initEvent = @event;
Expand All @@ -136,7 +143,7 @@ public async Task InitializeResourceEventPublished()

await events.PublishAsync(new OnResourcesPreparedContext(CancellationToken.None));

await initResourceTcs.Task.DefaultTimeout();
await initResourceTcs.Task; //.DefaultTimeout();

Assert.True(initResourceTcs.Task.IsCompletedSuccessfully);
Assert.NotNull(initEvent);
Expand Down Expand Up @@ -433,7 +440,7 @@ private static ApplicationOrchestrator CreateOrchestrator(
DistributedApplicationModel distributedAppModel,
ResourceNotificationService notificationService,
DcpExecutorEvents? dcpEvents = null,
DistributedApplicationEventing? applicationEventing = null,
IDistributedApplicationEventing? applicationEventing = null,
ResourceLoggerService? resourceLoggerService = null)
{
var serviceProvider = new ServiceCollection().BuildServiceProvider();
Expand Down
6 changes: 3 additions & 3 deletions tests/Aspire.Hosting.Tests/WaitForTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -531,13 +531,13 @@ public async Task WaitForObservedResultOfResourceReadyEvent()
});

var resourceReadyTcs = new TaskCompletionSource();
var dependency = builder.AddResource(new CustomResource("test"));
var dependency = builder.AddResource(new CustomResource("test"))
.OnResourceReady((_, _, _) => resourceReadyTcs.Task);

var nginx = builder.AddContainer("nginx", "mcr.microsoft.com/cbl-mariner/base/nginx", "1.22")
.WithReference(dependency)
.WaitFor(dependency);

builder.Eventing.Subscribe<ResourceReadyEvent>(dependency.Resource, (e, ct) => resourceReadyTcs.Task);

using var app = builder.Build();

// StartAsync will currently block until the dependency resource moves
Expand Down
Loading