using ZB.MOM.WW.ScadaBridge.Commons.Messages.Health; namespace ZB.MOM.WW.ScadaBridge.HealthMonitoring.Tests; /// /// SiteHealthReport.SecretMirrorStatuses carries every site node's /// deployed-secrets mirror failures (the standby's included) on the active node's report. /// public class SecretMirrorStatusHealthFieldTests { /// Verifies that a report collected before any status was supplied leaves the field null. [Fact] public void CollectReport_NeverTold_LeavesTheFieldNull() { Assert.Null(new SiteHealthCollector().CollectReport("TestSite").SecretMirrorStatuses); } /// Verifies that a collected report carries the latest snapshot without draining it. [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); } /// Verifies that setting the status to null resets the field to no data. [Fact] public void SetNull_ResetsToNoData() { var collector = new SiteHealthCollector(); collector.SetSecretMirrorStatuses([]); collector.SetSecretMirrorStatuses(null); Assert.Null(collector.CollectReport("TestSite").SecretMirrorStatuses); } }