test: observe monitor waits without delays
This commit is contained in:
parent
ea17bc8624
commit
fa4bdfe89f
4 changed files with 127 additions and 35 deletions
|
|
@ -427,21 +427,38 @@ public sealed class LiveSessionCommandRouterTests
|
|||
router.Publish(new SendServerCommandCmd("@active")));
|
||||
Assert.True(sendEntered.Wait(TimeSpan.FromSeconds(5)));
|
||||
using var disposeStarted = new ManualResetEventSlim();
|
||||
Task dispose = Task.Run(() =>
|
||||
Exception? disposeError = null;
|
||||
var disposeThread = new Thread(() =>
|
||||
{
|
||||
disposeStarted.Set();
|
||||
router.Dispose();
|
||||
});
|
||||
Assert.True(disposeStarted.Wait(TimeSpan.FromSeconds(5)));
|
||||
Task firstCompletion = await Task.WhenAny(
|
||||
dispose,
|
||||
Task.Delay(TimeSpan.FromMilliseconds(100)));
|
||||
Assert.NotSame(dispose, firstCompletion);
|
||||
try
|
||||
{
|
||||
router.Dispose();
|
||||
}
|
||||
catch (Exception error)
|
||||
{
|
||||
disposeError = error;
|
||||
}
|
||||
})
|
||||
{
|
||||
IsBackground = true,
|
||||
Name = "LiveSessionCommandRouter concurrent dispose contract",
|
||||
};
|
||||
disposeThread.Start();
|
||||
bool disposeStartedInTime = disposeStarted.Wait(TimeSpan.FromSeconds(5));
|
||||
bool disposeBlockedOnTransport = disposeStartedInTime && SpinWait.SpinUntil(
|
||||
() => (disposeThread.ThreadState & ThreadState.WaitSleepJoin) != 0,
|
||||
TimeSpan.FromSeconds(5));
|
||||
|
||||
releaseSend.Set();
|
||||
await Task.WhenAll(publish, dispose);
|
||||
await publish;
|
||||
bool disposeJoined = disposeThread.Join(TimeSpan.FromSeconds(5));
|
||||
router.Publish(new SendServerCommandCmd("@after"));
|
||||
|
||||
Assert.True(disposeStartedInTime, "the dedicated dispose thread did not start");
|
||||
Assert.True(disposeBlockedOnTransport, "dispose never waited for the in-flight send");
|
||||
Assert.True(disposeJoined, "dispose did not finish after the send returned");
|
||||
Assert.Null(disposeError);
|
||||
Assert.Equal(["@active"], sent);
|
||||
Assert.False(router.IsActive);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue