48 lines
1.3 KiB
C#
48 lines
1.3 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Shouldly;
|
|
using Xunit;
|
|
using ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Host.Sta;
|
|
|
|
namespace ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Host.Tests;
|
|
|
|
[Trait("Category", "Unit")]
|
|
public sealed class StaPumpTests
|
|
{
|
|
[Fact]
|
|
public async Task InvokeAsync_runs_work_on_the_STA_thread()
|
|
{
|
|
using var pump = new StaPump();
|
|
await pump.WaitForStartedAsync();
|
|
|
|
var apartment = await pump.InvokeAsync(() => Thread.CurrentThread.GetApartmentState());
|
|
apartment.ShouldBe(ApartmentState.STA);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Responsiveness_probe_returns_true_under_healthy_pump()
|
|
{
|
|
using var pump = new StaPump();
|
|
await pump.WaitForStartedAsync();
|
|
|
|
(await pump.IsResponsiveAsync(TimeSpan.FromSeconds(2))).ShouldBeTrue();
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Responsiveness_probe_returns_false_when_pump_is_wedged()
|
|
{
|
|
using var pump = new StaPump();
|
|
await pump.WaitForStartedAsync();
|
|
|
|
// Wedge the pump with an infinite work item on the STA thread.
|
|
var wedge = new ManualResetEventSlim();
|
|
_ = pump.InvokeAsync(() => wedge.Wait());
|
|
|
|
var responsive = await pump.IsResponsiveAsync(TimeSpan.FromMilliseconds(500));
|
|
responsive.ShouldBeFalse();
|
|
|
|
wedge.Set();
|
|
}
|
|
}
|