using ZB.MOM.WW.ScadaBridge.Commons.Messages.Health; namespace ZB.MOM.WW.ScadaBridge.HealthMonitoring.Tests; /// /// Review finding M1 — SiteHealthReport.SecretMirrorStatuses carries every site node's /// deployed-secrets mirror failures (the standby's included) on the active node's report. /// public class SecretMirrorStatusHealthFieldTests { [Fact] public void CollectReport_NeverTold_LeavesTheFieldNull() { Assert.Null(new SiteHealthCollector().CollectReport("TestSite").SecretMirrorStatuses); } [Fact] public void CollectReport_CarriesTheLatestSnapshot_AndDoesNotDrainIt() { var collector = new SiteHealthCollector(); collector.SetSecretMirrorStatuses( [ new SecretMirrorNodeStatus("node-a", DateTimeOffset.UtcNow, []), new SecretMirrorNodeStatus( "node-b", DateTimeOffset.UtcNow, [new SecretMirrorFailure("S1", "did not decrypt")]), ]); var first = collector.CollectReport("TestSite").SecretMirrorStatuses!; var second = collector.CollectReport("TestSite").SecretMirrorStatuses!; Assert.Equal(["node-a", "node-b"], first.Select(s => s.NodeName)); Assert.Equal(2, second.Count); // point-in-time, not interval-drained Assert.Equal("S1", Assert.Single(first[1].Failures).SecretName); } [Fact] public void SetNull_ResetsToNoData() { var collector = new SiteHealthCollector(); collector.SetSecretMirrorStatuses([]); collector.SetSecretMirrorStatuses(null); Assert.Null(collector.CollectReport("TestSite").SecretMirrorStatuses); } }