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