diff --git a/.github/workflows/healthchecks_nats_ci.yml b/.github/workflows/healthchecks_nats_ci.yml
index 69853fd915..d372a414e3 100644
--- a/.github/workflows/healthchecks_nats_ci.yml
+++ b/.github/workflows/healthchecks_nats_ci.yml
@@ -29,46 +29,8 @@ on:
jobs:
build:
- runs-on: ubuntu-latest
- services:
- nats:
- image: nats:latest
- ports:
- - "4222:4222"
- - "8222:8222"
- - "6222:6222"
- steps:
- - uses: actions/checkout@v3
- - name: Setup .NET
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: |
- 8.0.x
- 9.0.x
- - name: Restore
- run: |
- dotnet restore ./src/HealthChecks.Nats/HealthChecks.Nats.csproj &&
- dotnet restore ./test/HealthChecks.Nats.Tests/HealthChecks.Nats.Tests.csproj
- - name: Check formatting
- run: |
- dotnet format --no-restore --verify-no-changes --severity warn ./src/HealthChecks.Nats/HealthChecks.Nats.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1) &&
- 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)
- - name: Build
- run: |
- dotnet build --no-restore ./src/HealthChecks.Nats/HealthChecks.Nats.csproj &&
- dotnet build --no-restore ./test/HealthChecks.Nats.Tests/HealthChecks.Nats.Tests.csproj
- - name: Test
- run: >
- dotnet test
- ./test/HealthChecks.Nats.Tests/HealthChecks.Nats.Tests.csproj
- --no-restore
- --no-build
- --collect "XPlat Code Coverage"
- --results-directory .coverage
- --
- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
- - name: Upload Coverage
- uses: codecov/codecov-action@v5
- with:
- flags: Nats
- directory: .coverage
+ uses: ./.github/workflows/reusable_ci_workflow.yml
+ with:
+ PROJECT_PATH: ./src/HealthChecks.Nats/HealthChecks.Nats.csproj
+ TEST_PROJECT_PATH: ./test/HealthChecks.Nats.Tests/HealthChecks.Nats.Tests.csproj
+ CODECOV_FLAGS: Nats
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 2c2207765a..91308f0a85 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -106,6 +106,7 @@
+
diff --git a/test/HealthChecks.Nats.Tests/Defines.cs b/test/HealthChecks.Nats.Tests/Defines.cs
deleted file mode 100644
index 793700bf79..0000000000
--- a/test/HealthChecks.Nats.Tests/Defines.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-namespace HealthChecks.Nats.Tests;
-
-internal class Defines
-{
- public const string DefaultLocalConnectionString = "nats://localhost:4222";
- public const string DemoConnectionString = "nats://demo.nats.io:4222";
- public const string MixedLocalUrl = "nats://localhost:4222, nats://localhost:8222";
- public const string ConnectionStringDoesNotExistOrStopped = "nats://DoesNotExist:4222";
-
- public const string CredentialsPathDoesnExist = nameof(CredentialsPathDoesnExist);
-
- public const string NatsName = "nats";
- public const string CustomRegistrationName = nameof(CustomRegistrationName);
- public static readonly string[] Tags = [NatsName];
-
- public const string HealthRequestRelativePath = "/health";
-}
diff --git a/test/HealthChecks.Nats.Tests/DependencyInjection/RegistrationTests.cs b/test/HealthChecks.Nats.Tests/DependencyInjection/RegistrationTests.cs
index da2be2a245..0886f534eb 100644
--- a/test/HealthChecks.Nats.Tests/DependencyInjection/RegistrationTests.cs
+++ b/test/HealthChecks.Nats.Tests/DependencyInjection/RegistrationTests.cs
@@ -1,10 +1,11 @@
using NATS.Client.Core;
-using static HealthChecks.Nats.Tests.Defines;
namespace HealthChecks.Nats.Tests.DependencyInjection;
public class nats_registration_should
{
+ private const string ConnectionString = "nats://localhost:4222";
+
[Fact]
public void add_health_check_when_properly_configured()
{
@@ -47,7 +48,7 @@ public void add_health_check_when_properly_configured_by_using_singlton_regestra
var services = new ServiceCollection();
var natsOpts = NatsOpts.Default with
{
- Url = DefaultLocalConnectionString,
+ Url = ConnectionString,
};
var connection = new NatsConnection(natsOpts);
@@ -86,7 +87,7 @@ private NatsConnection ClientFactory(IServiceProvider _)
{
var options = NatsOpts.Default with
{
- Url = DefaultLocalConnectionString,
+ Url = ConnectionString,
};
return new NatsConnection(options);
}
diff --git a/test/HealthChecks.Nats.Tests/Functional/NatsHealthCheckTests.cs b/test/HealthChecks.Nats.Tests/Functional/NatsHealthCheckTests.cs
index 5aeb63d843..2944748f78 100644
--- a/test/HealthChecks.Nats.Tests/Functional/NatsHealthCheckTests.cs
+++ b/test/HealthChecks.Nats.Tests/Functional/NatsHealthCheckTests.cs
@@ -1,21 +1,21 @@
using System.Net;
using NATS.Client.Core;
-using NATS.Client.Hosting;
-using static HealthChecks.Nats.Tests.Defines;
namespace HealthChecks.Nats.Tests.Functional;
-public class nats_healthcheck_should
+public class nats_healthcheck_should(NatsContainerFixture natsFixture) : IClassFixture
{
[Fact]
public async Task be_healthy_when_nats_is_available_using_client_factory()
{
+ string connectionString = natsFixture.GetConnectionString();
+
var webHostBuilder = new WebHostBuilder()
.ConfigureServices(services =>
{
var options = NatsOpts.Default with
{
- Url = DefaultLocalConnectionString,
+ Url = connectionString,
};
var natsConnection = new NatsConnection(options);
@@ -42,12 +42,14 @@ public async Task be_healthy_when_nats_is_available_using_client_factory()
[Fact]
public async Task be_healthy_when_nats_is_available_using_singleton()
{
+ string connectionString = natsFixture.GetConnectionString();
+
var webHostBuilder = new WebHostBuilder()
.ConfigureServices(services =>
{
var options = NatsOpts.Default with
{
- Url = DefaultLocalConnectionString,
+ Url = connectionString
};
services
@@ -83,7 +85,7 @@ public async Task be_unhealthy_when_nats_is_unavailable()
{
var options = NatsOpts.Default with
{
- Url = ConnectionStringDoesNotExistOrStopped,
+ Url = "nats://DoesNotExist:4222",
};
return new NatsConnection(options);
}, tags: new string[] { "nats" });
diff --git a/test/HealthChecks.Nats.Tests/HealthChecks.Nats.Tests.csproj b/test/HealthChecks.Nats.Tests/HealthChecks.Nats.Tests.csproj
index 02fb71da06..15cedbc29c 100644
--- a/test/HealthChecks.Nats.Tests/HealthChecks.Nats.Tests.csproj
+++ b/test/HealthChecks.Nats.Tests/HealthChecks.Nats.Tests.csproj
@@ -4,4 +4,8 @@
+
+
+
+
diff --git a/test/HealthChecks.Nats.Tests/NatsContainerFixture.cs b/test/HealthChecks.Nats.Tests/NatsContainerFixture.cs
new file mode 100644
index 0000000000..38b9dafa4a
--- /dev/null
+++ b/test/HealthChecks.Nats.Tests/NatsContainerFixture.cs
@@ -0,0 +1,39 @@
+using Testcontainers.Nats;
+
+namespace HealthChecks.Nats.Tests;
+
+public class NatsContainerFixture : IAsyncLifetime
+{
+ private const string Registry = "docker.io";
+
+ private const string Image = "library/nats";
+
+ private const string Tag = "2.11.8";
+
+ public NatsContainer? Container { get; private set; }
+
+ public string GetConnectionString()
+ {
+ if (Container is null)
+ {
+ throw new InvalidOperationException("The test container was not initialized.");
+ }
+
+ return Container.GetConnectionString();
+ }
+
+ public async Task InitializeAsync() => Container = await CreateContainerAsync();
+
+ public Task DisposeAsync() => Container?.DisposeAsync().AsTask() ?? Task.CompletedTask;
+
+ private static async Task CreateContainerAsync()
+ {
+ var container = new NatsBuilder()
+ .WithImage($"{Registry}/{Image}:{Tag}")
+ .Build();
+
+ await container.StartAsync();
+
+ return container;
+ }
+}