Skip to content

Commit 3aee551

Browse files
Alirexaaadamsitnik
andauthored
Migrate HealthChecks.Milvus tests to Testcontainers (#2360)
* Migrate HealthChecks.Milvus tests to Testcontainers * Update test/HealthChecks.Milvus.Tests/MilvusContainerFixture.cs Co-authored-by: Adam Sitnik <[email protected]> --------- Co-authored-by: Adam Sitnik <[email protected]>
1 parent d8d88a0 commit 3aee551

File tree

5 files changed

+55
-43
lines changed

5 files changed

+55
-43
lines changed

.github/workflows/healthchecks_milvus_ci.yml

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -29,43 +29,8 @@ on:
2929

3030
jobs:
3131
build:
32-
runs-on: ubuntu-latest
33-
steps:
34-
- uses: actions/checkout@v3
35-
- name: 'wget'
36-
run: 'wget https://github.com/milvus-io/milvus/releases/download/v2.4.6/milvus-standalone-docker-compose.yml -O docker-compose.yml'
37-
- name: 'compose'
38-
run: 'sudo docker compose up -d'
39-
- name: Setup .NET
40-
uses: actions/setup-dotnet@v4
41-
with:
42-
dotnet-version: |
43-
8.0.x
44-
9.0.x
45-
- name: Restore
46-
run: |
47-
dotnet restore ./src/HealthChecks.Milvus/HealthChecks.Milvus.csproj &&
48-
dotnet restore ./test/HealthChecks.Milvus.Tests/HealthChecks.Milvus.Tests.csproj
49-
- name: Check formatting
50-
run: |
51-
dotnet format --no-restore --verify-no-changes --severity warn ./src/HealthChecks.Milvus/HealthChecks.Milvus.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1) &&
52-
dotnet format --no-restore --verify-no-changes --severity warn ./test/HealthChecks.Milvus.Tests/HealthChecks.Milvus.Tests.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1)
53-
- name: Build
54-
run: |
55-
dotnet build --no-restore ./src/HealthChecks.Milvus/HealthChecks.Milvus.csproj &&
56-
dotnet build --no-restore ./test/HealthChecks.Milvus.Tests/HealthChecks.Milvus.Tests.csproj
57-
- name: Test
58-
run: >
59-
dotnet test
60-
./test/HealthChecks.Milvus.Tests/HealthChecks.Milvus.Tests.csproj
61-
--no-restore
62-
--no-build
63-
--collect "XPlat Code Coverage"
64-
--results-directory .coverage
65-
--
66-
DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
67-
- name: Upload Coverage
68-
uses: codecov/codecov-action@v5
69-
with:
70-
flags: Milvus
71-
directory: .coverage
32+
uses: ./.github/workflows/reusable_ci_workflow.yml
33+
with:
34+
PROJECT_PATH: ./src/HealthChecks.Milvus/HealthChecks.Milvus.csproj
35+
TEST_PROJECT_PATH: ./test/HealthChecks.Milvus.Tests/HealthChecks.Milvus.Tests.csproj
36+
CODECOV_FLAGS: Milvus

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
<PackageVersion Include="System.Text.Json" Version="8.0.5" />
103103
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
104104
<PackageVersion Include="System.Threading.Channels" Version="8.0.0" />
105+
<PackageVersion Include="Testcontainers.Milvus" Version="$(TestcontainersVersion)" />
105106
<PackageVersion Include="Testcontainers.PostgreSql" Version="$(TestcontainersVersion)" />
106107
<PackageVersion Include="TestContainers.MongoDb" Version="$(TestcontainersVersion)" />
107108
<PackageVersion Include="Testcontainers.MsSql" Version="$(TestcontainersVersion)" />

test/HealthChecks.Milvus.Tests/Functional/MilvusHealthCheckTests.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
using System.Net;
2+
using Aspire.Milvus.Client.Tests;
23
using Milvus.Client;
34

45
namespace HealthChecks.Milvus.Tests.Functional;
56

6-
public class milvus_healthcheck_should
7+
public class milvus_healthcheck_should(MilvusContainerFixture milvusContainerFixture) : IClassFixture<MilvusContainerFixture>
78
{
89
[Fact]
910
public async Task be_healthy_when_milvus_is_available_using_client_factory()
1011
{
12+
string connectionString = milvusContainerFixture.GetConnectionString();
13+
1114
var webHostBuilder = new WebHostBuilder()
1215
.ConfigureServices(services =>
1316
{
1417
services
1518
.AddHealthChecks()
1619
.AddMilvus(
17-
clientFactory: sp => new MilvusClient("localhost"), tags: new string[] { "milvus" });
20+
clientFactory: sp => new MilvusClient(new Uri(connectionString)), tags: new string[] { "milvus" });
1821
})
1922
.Configure(app =>
2023
{
@@ -34,11 +37,13 @@ public async Task be_healthy_when_milvus_is_available_using_client_factory()
3437
[Fact]
3538
public async Task be_healthy_when_milvus_is_available_using_singleton()
3639
{
40+
string connectionString = milvusContainerFixture.GetConnectionString();
41+
3742
var webHostBuilder = new WebHostBuilder()
3843
.ConfigureServices(services =>
3944
{
4045
services
41-
.AddSingleton(new MilvusClient("localhost"))
46+
.AddSingleton(new MilvusClient(new Uri(connectionString)))
4247
.AddHealthChecks()
4348
.AddMilvus(tags: new string[] { "milvus" });
4449
})

test/HealthChecks.Milvus.Tests/HealthChecks.Milvus.Tests.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

3+
<ItemGroup>
4+
<PackageReference Include="Testcontainers.Milvus" />
5+
</ItemGroup>
6+
37
<ItemGroup>
48
<ProjectReference Include="..\..\src\HealthChecks.Milvus\HealthChecks.Milvus.csproj" />
59
</ItemGroup>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using Testcontainers.Milvus;
2+
3+
namespace Aspire.Milvus.Client.Tests;
4+
5+
public sealed class MilvusContainerFixture : IAsyncLifetime
6+
{
7+
public const string Registry = "docker.io";
8+
9+
public const string Image = "milvusdb/milvus";
10+
11+
public const string Tag = "v2.4.13";
12+
13+
public MilvusContainer? Container { get; private set; }
14+
15+
public string GetConnectionString() => Container?.GetEndpoint().AbsoluteUri ??
16+
throw new InvalidOperationException("The test container was not initialized.");
17+
18+
public async Task InitializeAsync() => Container = await CreateContainerAsync();
19+
20+
public async Task DisposeAsync()
21+
{
22+
if (Container is not null)
23+
{
24+
await Container.DisposeAsync();
25+
}
26+
}
27+
28+
public static async Task<MilvusContainer> CreateContainerAsync()
29+
{
30+
var container = new MilvusBuilder()
31+
.WithImage($"{Registry}/{Image}:{Tag}")
32+
.Build();
33+
await container.StartAsync();
34+
35+
return container;
36+
}
37+
}

0 commit comments

Comments
 (0)