namespace ZB.MOM.WW.ScadaBridge.Host.Tests; /// /// ScadaBridge#76: a routine Windows service stop must not be logged as /// [FTL] host terminated unexpectedly. /// public class GracefulShutdownTests { /// A cancellation escaping RunAsync after ApplicationStopping fired is a routine stop. [Fact] public void Cancellation_AfterStopRequested_IsGraceful() { using var cts = new CancellationTokenSource(); cts.Cancel(); Assert.True(Program.IsGracefulShutdown(new OperationCanceledException(), cts.Token)); Assert.True(Program.IsGracefulShutdown(new TaskCanceledException(), cts.Token)); } /// A cancellation with no shutdown requested is still a genuine failure. [Fact] public void Cancellation_WithoutStopRequested_IsNotGraceful() { using var cts = new CancellationTokenSource(); Assert.False(Program.IsGracefulShutdown(new OperationCanceledException(), cts.Token)); Assert.False(Program.IsGracefulShutdown(new OperationCanceledException(), CancellationToken.None)); } /// A real fault during shutdown must still be reported as fatal. [Fact] public void NonCancellationException_IsNeverGraceful() { using var cts = new CancellationTokenSource(); cts.Cancel(); Assert.False(Program.IsGracefulShutdown(new InvalidOperationException("boom"), cts.Token)); } }