using ZB.MOM.WW.ScadaBridge.SiteRuntime.Scripts;
namespace ZB.MOM.WW.ScadaBridge.SiteRuntime.Tests.Scripts;
public class TriggerEvalGateLifecycleTests
{
/// Verifies that the shared gate is process-owned and remains usable after a caller disposes it.
/// A task that represents the asynchronous operation.
[Fact]
public async Task SharedGate_IsProcessOwnedAndRemainsUsableAfterCallerDisposes()
{
var gate = TriggerEvalGate.Shared(new SiteRuntimeOptions());
gate.Dispose();
Assert.Same(gate, TriggerEvalGate.Shared(new SiteRuntimeOptions()));
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(5));
await gate.WaitAsync(deadline.Token);
gate.Release();
}
/// Verifies that an owned gate is disposed by its caller.
[Fact]
public void OwnedGate_IsDisposedByCaller()
{
var gate = new TriggerEvalGate(1);
gate.Dispose();
Assert.Throws(() => { _ = gate.WaitAsync(CancellationToken.None); });
}
}