diff --git a/.github/workflows/healthchecks_consul_ci.yml b/.github/workflows/healthchecks_consul_ci.yml
index d4a11ffabe..73a6a6f3a9 100644
--- a/.github/workflows/healthchecks_consul_ci.yml
+++ b/.github/workflows/healthchecks_consul_ci.yml
@@ -29,45 +29,8 @@ on:
jobs:
build:
- runs-on: ubuntu-latest
- services:
- consul:
- image: hashicorp/consul:latest
- ports:
- - 8500:8500
- - 8600:8600
- 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.Consul/HealthChecks.Consul.csproj &&
- dotnet restore ./test/HealthChecks.Consul.Tests/HealthChecks.Consul.Tests.csproj
- - name: Check formatting
- run: |
- dotnet format --no-restore --verify-no-changes --severity warn ./src/HealthChecks.Consul/HealthChecks.Consul.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1) &&
- dotnet format --no-restore --verify-no-changes --severity warn ./test/HealthChecks.Consul.Tests/HealthChecks.Consul.Tests.csproj || (echo "Run 'dotnet format' to fix issues" && exit 1)
- - name: Build
- run: |
- dotnet build --no-restore ./src/HealthChecks.Consul/HealthChecks.Consul.csproj &&
- dotnet build --no-restore ./test/HealthChecks.Consul.Tests/HealthChecks.Consul.Tests.csproj
- - name: Test
- run: >
- dotnet test
- ./test/HealthChecks.Consul.Tests/HealthChecks.Consul.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: Consul
- directory: .coverage
+ uses: ./.github/workflows/reusable_ci_workflow.yml
+ with:
+ PROJECT_PATH: ./src/HealthChecks.Consul/HealthChecks.Consul.csproj
+ TEST_PROJECT_PATH: ./test/HealthChecks.Consul.Tests/HealthChecks.Consul.Tests.csproj
+ CODECOV_FLAGS: Consul
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 2c2207765a..24912c6446 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -104,6 +104,7 @@
+
diff --git a/test/HealthChecks.Consul.Tests/ConsulContainerFixture.cs b/test/HealthChecks.Consul.Tests/ConsulContainerFixture.cs
new file mode 100644
index 0000000000..095276ebda
--- /dev/null
+++ b/test/HealthChecks.Consul.Tests/ConsulContainerFixture.cs
@@ -0,0 +1,44 @@
+using Testcontainers.Consul;
+
+namespace HealthChecks.Consul.Tests;
+
+public class ConsulContainerFixture : IAsyncLifetime
+{
+ private const string Registry = "docker.io";
+
+ private const string Image = "library/consul";
+
+ private const string Tag = "1.15.4";
+
+ public ConsulContainer? Container { get; private set; }
+
+ public ConsulOptions GetConnectionOptions()
+ {
+ if (Container is null)
+ {
+ throw new InvalidOperationException("The test container was not initialized.");
+ }
+
+ return new ConsulOptions
+ {
+ HostName = Container.Hostname,
+ Port = Container.GetMappedPublicPort(ConsulBuilder.ConsulHttpPort),
+ RequireHttps = false
+ };
+ }
+
+ public async Task InitializeAsync() => Container = await CreateContainerAsync();
+
+ public Task DisposeAsync() => Container?.DisposeAsync().AsTask() ?? Task.CompletedTask;
+
+ private async Task CreateContainerAsync()
+ {
+ var container = new ConsulBuilder()
+ .WithImage($"{Registry}/{Image}:{Tag}")
+ .Build();
+
+ await container.StartAsync();
+
+ return container;
+ }
+}
diff --git a/test/HealthChecks.Consul.Tests/Functional/ConsulHealthCheckTests.cs b/test/HealthChecks.Consul.Tests/Functional/ConsulHealthCheckTests.cs
index cf0f557c94..3ce437ca45 100644
--- a/test/HealthChecks.Consul.Tests/Functional/ConsulHealthCheckTests.cs
+++ b/test/HealthChecks.Consul.Tests/Functional/ConsulHealthCheckTests.cs
@@ -2,20 +2,22 @@
namespace HealthChecks.Consul.Tests.Functional;
-public class consul_healthcheck_should
+public class consul_healthcheck_should(ConsulContainerFixture consulFixture) : IClassFixture
{
[Fact]
public async Task be_healthy_if_consul_is_available()
{
+ var options = consulFixture.GetConnectionOptions();
+
var webHostBuilder = new WebHostBuilder()
.ConfigureServices(services =>
{
services.AddHealthChecks()
.AddConsul(setup =>
{
- setup.HostName = "localhost";
- setup.Port = 8500;
- setup.RequireHttps = false;
+ setup.HostName = options.HostName;
+ setup.Port = options.Port;
+ setup.RequireHttps = options.RequireHttps;
}, tags: ["consul"]);
})
.Configure(app =>
@@ -36,6 +38,8 @@ public async Task be_healthy_if_consul_is_available()
[Fact]
public async Task be_unhealthy_if_consul_is_not_available()
{
+ var options = consulFixture.GetConnectionOptions();
+
var webHostBuilder = new WebHostBuilder()
.ConfigureServices(services =>
{
@@ -43,8 +47,8 @@ public async Task be_unhealthy_if_consul_is_not_available()
.AddConsul(setup =>
{
setup.HostName = "non-existing-host";
- setup.Port = 8500;
- setup.RequireHttps = false;
+ setup.Port = options.Port;
+ setup.RequireHttps = options.RequireHttps;
}, tags: ["consul"]);
})
.Configure(app =>
diff --git a/test/HealthChecks.Consul.Tests/HealthChecks.Consul.Tests.csproj b/test/HealthChecks.Consul.Tests/HealthChecks.Consul.Tests.csproj
index fa346d7185..7a117df260 100644
--- a/test/HealthChecks.Consul.Tests/HealthChecks.Consul.Tests.csproj
+++ b/test/HealthChecks.Consul.Tests/HealthChecks.Consul.Tests.csproj
@@ -4,4 +4,8 @@
+
+
+
+