diff --git a/src/modules/Elsa.Workflows.Runtime/Extensions/HealthCheckExtensions.cs b/src/modules/Elsa.Workflows.Runtime/Extensions/HealthCheckExtensions.cs
index 8adcafb8f..a440a2cda 100644
--- a/src/modules/Elsa.Workflows.Runtime/Extensions/HealthCheckExtensions.cs
+++ b/src/modules/Elsa.Workflows.Runtime/Extensions/HealthCheckExtensions.cs
@@ -18,7 +18,7 @@ public static class HealthCheckExtensions
///
/// Tag applied to Elsa readiness checks.
///
- public const string ReadinessTag = "readiness";
+ public const string ReadinessTag = "elsa-readiness";
private static readonly string[] ReadinessTags = [ElsaTag, ReadinessTag];
diff --git a/test/unit/Elsa.Workflows.Runtime.UnitTests/HealthChecks/ElsaDistributedLockHealthCheckTests.cs b/test/unit/Elsa.Workflows.Runtime.UnitTests/HealthChecks/ElsaDistributedLockHealthCheckTests.cs
index 115456c40..fdbaf77ed 100644
--- a/test/unit/Elsa.Workflows.Runtime.UnitTests/HealthChecks/ElsaDistributedLockHealthCheckTests.cs
+++ b/test/unit/Elsa.Workflows.Runtime.UnitTests/HealthChecks/ElsaDistributedLockHealthCheckTests.cs
@@ -31,7 +31,7 @@ public class ElsaDistributedLockHealthCheckTests
Assert.Equal(HealthStatus.Healthy, result.Status);
Assert.Equal("distributed-locks", result.Data["category"]);
- _distributedLockProvider.Received(1).CreateLock(Arg.Is(x => x.StartsWith("elsa-health-check-", StringComparison.Ordinal)));
+ _distributedLockProvider.Received(1).CreateLock(Arg.Is(x => IsProbeLockName(x)));
await _distributedLock.Received(1).TryAcquireAsync(ExpectedLockAcquisitionTimeout, Arg.Any());
}
@@ -52,6 +52,7 @@ public class ElsaDistributedLockHealthCheckTests
Assert.Equal(2, lockNames.Count);
Assert.All(lockNames, x => Assert.DoesNotContain(Environment.MachineName, x, StringComparison.OrdinalIgnoreCase));
Assert.NotEqual(lockNames[0], lockNames[1]);
+ Assert.All(lockNames, x => Assert.True(IsProbeLockName(x)));
}
[Fact]
@@ -102,4 +103,11 @@ public class ElsaDistributedLockHealthCheckTests
{
DistributedLockAcquisitionTimeout = ExpectedLockAcquisitionTimeout
});
+
+ private static bool IsProbeLockName(string lockName)
+ {
+ const string prefix = "elsa-health-check-";
+ return lockName.StartsWith(prefix, StringComparison.Ordinal)
+ && Guid.TryParseExact(lockName[prefix.Length..], "N", out _);
+ }
}
diff --git a/test/unit/Elsa.Workflows.Runtime.UnitTests/HealthChecks/HealthCheckExtensionsTests.cs b/test/unit/Elsa.Workflows.Runtime.UnitTests/HealthChecks/HealthCheckExtensionsTests.cs
index 5bb78efc4..9033fb664 100644
--- a/test/unit/Elsa.Workflows.Runtime.UnitTests/HealthChecks/HealthCheckExtensionsTests.cs
+++ b/test/unit/Elsa.Workflows.Runtime.UnitTests/HealthChecks/HealthCheckExtensionsTests.cs
@@ -1,6 +1,7 @@
using Elsa.Extensions;
using Elsa.Workflows.Runtime.Options;
using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Diagnostics.HealthChecks;
using Microsoft.Extensions.Options;
namespace Elsa.Workflows.Runtime.UnitTests.HealthChecks;
@@ -20,4 +21,22 @@ public class HealthCheckExtensionsTests
Assert.NotNull(serviceProvider.GetRequiredService>());
}
+
+ [Fact]
+ public void AddElsaReadinessChecksUsesElsaSpecificReadinessTag()
+ {
+ var services = new ServiceCollection();
+
+ services
+ .AddHealthChecks()
+ .AddElsaReadinessChecks(includePersistence: false);
+
+ using var serviceProvider = services.BuildServiceProvider();
+ var registrations = serviceProvider.GetRequiredService>().Value.Registrations;
+
+ var registration = Assert.Single(registrations);
+ Assert.Contains("elsa", registration.Tags);
+ Assert.Contains(HealthCheckExtensions.ReadinessTag, registration.Tags);
+ Assert.DoesNotContain("readiness", registration.Tags);
+ }
}