Skip to content

Commit 4052f0b

Browse files
Add Waitfor For Meilisearch (#183)
* Add Waitfor For Meilisearch * Update example to use waitfor * Update MeilisearchFunctionalTests.cs --------- Co-authored-by: Aaron Powell <[email protected]>
1 parent 20537f5 commit 4052f0b

File tree

4 files changed

+48
-47
lines changed

4 files changed

+48
-47
lines changed

examples/meilisearch/CommunityToolkit.Aspire.Hosting.Meilisearch.AppHost/Program.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
var meilisearch = builder.AddMeilisearch("meilisearch");
66

77
builder.AddProject<CommunityToolkit_Aspire_Hosting_Meilisearch_ApiService>("apiservice")
8-
.WithReference(meilisearch);
8+
.WithReference(meilisearch)
9+
.WaitFor(meilisearch);
910

1011
builder.Build().Run();

src/CommunityToolkit.Aspire.Hosting.Meilisearch/CommunityToolkit.Aspire.Hosting.Meilisearch.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
<ItemGroup>
99
<Compile Include="$(RepoRoot)src\VolumeNameGenerator.cs" Link="Utils\VolumeNameGenerator.cs" />
10+
<Compile Include="$(RepoRoot)src\CommunityToolkit.Aspire.Meilisearch\MeilisearchHealthCheck.cs" Link="MeilisearchHealthCheck.cs"></Compile>
1011
</ItemGroup>
1112

1213
<ItemGroup>

src/CommunityToolkit.Aspire.Hosting.Meilisearch/MeilisearchBuilderExtensions.cs

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
using Aspire.Hosting.ApplicationModel;
44
using Aspire.Hosting.Utils;
55
using Meilisearch;
6+
using Microsoft.Extensions.Diagnostics.HealthChecks;
7+
using CommunityToolkit.Aspire.Meilisearch;
8+
using Microsoft.Extensions.DependencyInjection;
69

710
namespace Aspire.Hosting;
811

@@ -49,26 +52,24 @@ public static IResourceBuilder<MeilisearchResource> AddMeilisearch(
4952

5053
var meilisearch = new MeilisearchResource(name, masterKeyParameter);
5154

52-
//following commented section need to aspire 9.0.
55+
MeilisearchClient? meilisearchClient = null;
5356

54-
//MeilisearchClient? meilisearchClient = null;
55-
56-
//builder.Eventing.Subscribe<ConnectionStringAvailableEvent>(meilisearch, async (@event, ct) =>
57-
//{
58-
// var connectionString = await meilisearch.ConnectionStringExpression.GetValueAsync(ct).ConfigureAwait(false)
59-
// ?? throw new DistributedApplicationException($"ConnectionStringAvailableEvent was published for the '{meilisearch.Name}' resource but the connection string was null.");
57+
builder.Eventing.Subscribe<ConnectionStringAvailableEvent>(meilisearch, async (@event, ct) =>
58+
{
59+
var connectionString = await meilisearch.ConnectionStringExpression.GetValueAsync(ct).ConfigureAwait(false)
60+
?? throw new DistributedApplicationException($"ConnectionStringAvailableEvent was published for the '{meilisearch.Name}' resource but the connection string was null.");
6061

61-
// meilisearchClient = CreateMeilisearchClient(connectionString);
62-
//});
62+
meilisearchClient = CreateMeilisearchClient(connectionString);
63+
});
6364

64-
//var healthCheckKey = $"{name}_check";
65-
//builder.Services.AddHealthChecks()
66-
// .Add(new HealthCheckRegistration(
67-
// healthCheckKey,
68-
// sp => new MeilisearchHealthCheck(meilisearchClient!),
69-
// failureStatus: default,
70-
// tags: default,
71-
// timeout: default));
65+
var healthCheckKey = $"{name}_check";
66+
builder.Services.AddHealthChecks()
67+
.Add(new HealthCheckRegistration(
68+
healthCheckKey,
69+
sp => new MeilisearchHealthCheck(meilisearchClient!),
70+
failureStatus: default,
71+
tags: default,
72+
timeout: default));
7273

7374
return builder.AddResource(meilisearch)
7475
.WithImage(MeilisearchContainerImageTags.Image, MeilisearchContainerImageTags.Tag)
@@ -77,8 +78,8 @@ public static IResourceBuilder<MeilisearchResource> AddMeilisearch(
7778
.WithEnvironment(context =>
7879
{
7980
context.EnvironmentVariables["MEILI_MASTER_KEY"] = meilisearch.MasterKeyParameter;
80-
});
81-
//.WithHealthCheck(healthCheckKey);
81+
})
82+
.WithHealthCheck(healthCheckKey);
8283
}
8384

8485
/// <summary>

tests/CommunityToolkit.Aspire.Hosting.Meilisearch/MeilisearchFunctionalTests.cs

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -189,46 +189,44 @@ public async Task WithDataShouldPersistStateBetweenUsages(bool useVolume)
189189
}
190190
}
191191

192-
//following commented section need to aspire 9.0.
193-
194-
//[Fact]
195-
//public async Task VerifyWaitForOnMeilisearchBlocksDependentResources()
196-
//{
197-
// var cts = new CancellationTokenSource(TimeSpan.FromMinutes(10));
198-
// using var builder = TestDistributedApplicationBuilder.Create(testOutputHelper);
192+
[Fact]
193+
public async Task VerifyWaitForOnMeilisearchBlocksDependentResources()
194+
{
195+
var cts = new CancellationTokenSource(TimeSpan.FromMinutes(10));
196+
using var builder = TestDistributedApplicationBuilder.Create(testOutputHelper);
199197

200-
// var healthCheckTcs = new TaskCompletionSource<HealthCheckResult>();
201-
// builder.Services.AddHealthChecks().AddAsyncCheck("blocking_check", () =>
202-
// {
203-
// return healthCheckTcs.Task;
204-
// });
198+
var healthCheckTcs = new TaskCompletionSource<HealthCheckResult>();
199+
builder.Services.AddHealthChecks().AddAsyncCheck("blocking_check", () =>
200+
{
201+
return healthCheckTcs.Task;
202+
});
205203

206-
// var resource = builder.AddMeilisearch("resource")
207-
// .WithHealthCheck("blocking_check");
204+
var resource = builder.AddMeilisearch("resource")
205+
.WithHealthCheck("blocking_check");
208206

209-
// var dependentResource = builder.AddMeilisearch("dependentresource")
210-
// .WaitFor(resource);
207+
var dependentResource = builder.AddMeilisearch("dependentresource")
208+
.WaitFor(resource);
211209

212-
// using var app = builder.Build();
210+
using var app = builder.Build();
213211

214-
// var pendingStart = app.StartAsync(cts.Token);
212+
var pendingStart = app.StartAsync(cts.Token);
215213

216-
// var rns = app.Services.GetRequiredService<ResourceNotificationService>();
214+
var rns = app.Services.GetRequiredService<ResourceNotificationService>();
217215

218-
// await rns.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
216+
await rns.WaitForResourceAsync(resource.Resource.Name, KnownResourceStates.Running, cts.Token);
219217

220-
// await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
218+
await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Waiting, cts.Token);
221219

222-
// healthCheckTcs.SetResult(HealthCheckResult.Healthy());
220+
healthCheckTcs.SetResult(HealthCheckResult.Healthy());
223221

224-
// await rns.WaitForResourceAsync(resource.Resource.Name, re => re.Snapshot.HealthStatus == HealthStatus.Healthy, cts.Token);
222+
await rns.WaitForResourceAsync(resource.Resource.Name, re => re.Snapshot.HealthStatus == HealthStatus.Healthy, cts.Token);
225223

226-
// await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
224+
await rns.WaitForResourceAsync(dependentResource.Resource.Name, KnownResourceStates.Running, cts.Token);
227225

228-
// await pendingStart;
226+
await pendingStart;
229227

230-
// await app.StopAsync();
231-
//}
228+
await app.StopAsync();
229+
}
232230

233231
private static async Task CreateTestData(MeilisearchClient meilisearchClient)
234232
{

0 commit comments

Comments
 (0)