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"]);
}
}