using Microsoft.Extensions.Diagnostics.HealthChecks; using Microsoft.Extensions.Options; using ZB.MOM.WW.ScadaBridge.Host.Health; using ZB.MOM.WW.ScadaBridge.Transport; namespace ZB.MOM.WW.ScadaBridge.Host.Tests; /// ScadaBridge#110: the bundle-signing-policy readiness entry. public sealed class BundleSigningPolicyHealthCheckTests { private sealed class FixedMonitor(TransportOptions o) : IOptionsMonitor { public TransportOptions CurrentValue => o; public TransportOptions Get(string? name) => o; public IDisposable? OnChange(Action listener) => null; } /// Degraded only when a production-boundary cluster accepts unsigned bundles. [Theory] [InlineData(true, false, HealthStatus.Degraded)] [InlineData(true, true, HealthStatus.Healthy)] [InlineData(false, false, HealthStatus.Healthy)] public async Task Status_follows_policy(bool boundary, bool require, HealthStatus expected) { var o = new TransportOptions(); o.Signing.ProductionBoundary = boundary; o.Signing.RequireSignedBundles = require; var result = await new BundleSigningPolicyHealthCheck(new FixedMonitor(o)) .CheckHealthAsync(new HealthCheckContext()); Assert.Equal(expected, result.Status); Assert.Equal(boundary, result.Data["productionBoundary"]); } }