Skip to content

Commit 211528e

Browse files
committed
Migrate HealthChecks.Nats tests to Testcontainers
1 parent 846fbc9 commit 211528e

File tree

7 files changed

+61
-69
lines changed

7 files changed

+61
-69
lines changed

.github/workflows/healthchecks_nats_ci.yml

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

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

Directory.Packages.props

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@
106106
<PackageVersion Include="Testcontainers.ClickHouse" Version="$(TestcontainersVersion)" />
107107
<PackageVersion Include="Testcontainers.Kafka" Version="$(TestcontainersVersion)" />
108108
<PackageVersion Include="Testcontainers.Milvus" Version="$(TestcontainersVersion)" />
109+
<PackageVersion Include="Testcontainers.Nats" Version="$(TestcontainersVersion)" />
109110
<PackageVersion Include="Testcontainers.PostgreSql" Version="$(TestcontainersVersion)" />
110111
<PackageVersion Include="TestContainers.MongoDb" Version="$(TestcontainersVersion)" />
111112
<PackageVersion Include="Testcontainers.MsSql" Version="$(TestcontainersVersion)" />

test/HealthChecks.Nats.Tests/Defines.cs

Lines changed: 0 additions & 17 deletions
This file was deleted.

test/HealthChecks.Nats.Tests/DependencyInjection/RegistrationTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
using NATS.Client.Core;
2-
using static HealthChecks.Nats.Tests.Defines;
32

43
namespace HealthChecks.Nats.Tests.DependencyInjection;
54

65
public class nats_registration_should
76
{
7+
private const string ConnectionString = "nats://localhost:4222";
8+
89
[Fact]
910
public void add_health_check_when_properly_configured()
1011
{
@@ -47,7 +48,7 @@ public void add_health_check_when_properly_configured_by_using_singlton_regestra
4748
var services = new ServiceCollection();
4849
var natsOpts = NatsOpts.Default with
4950
{
50-
Url = DefaultLocalConnectionString,
51+
Url = ConnectionString,
5152
};
5253
var connection = new NatsConnection(natsOpts);
5354

@@ -86,7 +87,7 @@ private NatsConnection ClientFactory(IServiceProvider _)
8687
{
8788
var options = NatsOpts.Default with
8889
{
89-
Url = DefaultLocalConnectionString,
90+
Url = ConnectionString,
9091
};
9192
return new NatsConnection(options);
9293
}

test/HealthChecks.Nats.Tests/Functional/NatsHealthCheckTests.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
using System.Net;
22
using NATS.Client.Core;
3-
using NATS.Client.Hosting;
4-
using static HealthChecks.Nats.Tests.Defines;
53

64
namespace HealthChecks.Nats.Tests.Functional;
75

8-
public class nats_healthcheck_should
6+
public class nats_healthcheck_should(NatsContainerFixture natsFixture) : IClassFixture<NatsContainerFixture>
97
{
108
[Fact]
119
public async Task be_healthy_when_nats_is_available_using_client_factory()
1210
{
11+
string connectionString = natsFixture.GetConnectionString();
12+
1313
var webHostBuilder = new WebHostBuilder()
1414
.ConfigureServices(services =>
1515
{
1616
var options = NatsOpts.Default with
1717
{
18-
Url = DefaultLocalConnectionString,
18+
Url = connectionString,
1919
};
2020
var natsConnection = new NatsConnection(options);
2121

@@ -42,12 +42,14 @@ public async Task be_healthy_when_nats_is_available_using_client_factory()
4242
[Fact]
4343
public async Task be_healthy_when_nats_is_available_using_singleton()
4444
{
45+
string connectionString = natsFixture.GetConnectionString();
46+
4547
var webHostBuilder = new WebHostBuilder()
4648
.ConfigureServices(services =>
4749
{
4850
var options = NatsOpts.Default with
4951
{
50-
Url = DefaultLocalConnectionString,
52+
Url = connectionString
5153
};
5254

5355
services
@@ -83,7 +85,7 @@ public async Task be_unhealthy_when_nats_is_unavailable()
8385
{
8486
var options = NatsOpts.Default with
8587
{
86-
Url = ConnectionStringDoesNotExistOrStopped,
88+
Url = "nats://DoesNotExist:4222",
8789
};
8890
return new NatsConnection(options);
8991
}, tags: new string[] { "nats" });

test/HealthChecks.Nats.Tests/HealthChecks.Nats.Tests.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@
44
<ProjectReference Include="..\..\src\HealthChecks.Nats\HealthChecks.Nats.csproj" />
55
</ItemGroup>
66

7+
<ItemGroup>
8+
<PackageReference Include="Testcontainers.Nats" />
9+
</ItemGroup>
10+
711
</Project>
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using Testcontainers.Nats;
2+
3+
namespace HealthChecks.Nats.Tests;
4+
5+
public class NatsContainerFixture : IAsyncLifetime
6+
{
7+
private const string Registry = "docker.io";
8+
9+
private const string Image = "library/nats";
10+
11+
private const string Tag = "2.11.8";
12+
13+
public NatsContainer? Container { get; private set; }
14+
15+
public string GetConnectionString()
16+
{
17+
if (Container is null)
18+
{
19+
throw new InvalidOperationException("The test container was not initialized.");
20+
}
21+
22+
return Container.GetConnectionString();
23+
}
24+
25+
public async Task InitializeAsync() => Container = await CreateContainerAsync();
26+
27+
public Task DisposeAsync() => Container?.DisposeAsync().AsTask() ?? Task.CompletedTask;
28+
29+
private static async Task<NatsContainer> CreateContainerAsync()
30+
{
31+
var container = new NatsBuilder()
32+
.WithImage($"{Registry}/{Image}:{Tag}")
33+
.Build();
34+
35+
await container.StartAsync();
36+
37+
return container;
38+
}
39+
}

0 commit comments

Comments
 (0)